javascript - 如何正确等待模板在 Angular 2 中更新

标签 javascript angularjs angular typescript

我试图了解模型更改后等待模板在 Angular 2 应用程序中更新的最佳方法。

@Component{
   template : `<button type="button" (click)="handleClick()">Click</button>
               <div *ngIf="!hidden">
                   <input type='text' #eleInput/>
               </div>`
}
export class Sample{
   private hidden: boolean = true;
   @ViewChild('eleInput') eleInput: ElementRef;

   constructor(){}

   handleClick(){
      this.hidden = false;

      //nativeElement is undefined here
      this.eleInput.nativeElement.focus();

      //nativeElement is defined here
      setTimeout(() => {
        this.eleInput.nativeElement.focus();
      });
   }
}

在上面的代码中使用 setTimeout 似乎很 hacky,所以我想知道是否有更好的方法。

谢谢!

最佳答案

没有办法等待模板更新。

你可以注入(inject)ChangeDetectorRef

constructor(private cdRef:ChangeDetectorRef) {}

然后调用

this.cdRef.detectChanges();

据我所知,模板会在调用返回时更新。

关于javascript - 如何正确等待模板在 Angular 2 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40072462/

相关文章:

javascript - AngularJS Controller 如何访问非 AngularJS iframe 中的函数?

javascript - 如何将基于 IIFE 的 JavaScript 模块导入 Angular TypeScript 应用程序?

javascript - 文档.getElementById

javascript - 使用 CSS 内联 JavaScript

javascript - 从两个 http req 获取数据并将它们组合起来

javascript - 为此选项卡式 angularjs 页面加载 html 页面

c# - 指定从 ASP.NET Core WebApi 提供服务的 Angular ClientApp 的基本 URL

javascript - Angular 2 根据ngFor索引生成类名

javascript - 从Python中的 session 存储中获取变量

javascript - 在 javascript 中将 onclick 事件设置为 C# URL 操作?