【问题标题】:*ngIf change not detect in template*ngIf 更改未在模板中检测到
【发布时间】:2019-11-12 08:12:15
【问题描述】:

我正在尝试显示加载 3 秒并使用 *ngIf 隐藏它。我使用的是 angular 8。在我之前的项目中,我没有遇到这个问题。

这是我的代码..

//Component.ts
loading = true;
ngOnInit() { 
   setTimeout(()=> {
     this.loading = false;
     console.log(this.loading)
   },3000)
}

//Component.html
<div *ngIf="loading" class="col-lg-12" style="text-align: center;">
     <app-loading></app-loading>
</div>

3 秒后加载为假,但未在模板中检测到更改。我可以知道为什么吗?任何不使用 ChangeDetectorRef 解决的建议

【问题讨论】:

    标签: javascript angular typescript angular-ng-if


    【解决方案1】:

    该示例应该可以工作,除非您使用OnPush 更改检测策略:

    【讨论】:

    • 谢谢。我注意到changeDetection 已设置为ChangeDetectionStrategy.OnPush
    【解决方案2】:

    试试这样:

    Working Demo

    ngOnInit() {
      let that = this;
      setTimeout(() => {
        that.loading = false;
        console.log(that.loading);
      }, 3000);
    }
    

    【讨论】:

    • 工作正常。我能解释一下吗?
    • 有时,在setTimeout 内,此实例不起作用。根据我的个人经验,并非所有版本的 Angular 都会出现这种情况。
    • 谢谢。我只是使用 setTimeout 而不是稍后从服务中获取数据。我希望从服务获取数据时我的代码不会出现问题。
    • 不,这不会有任何问题,如果这有帮助,请接受答案
    • 您不需要添加一个变量。箭头功能工作正常
    猜你喜欢
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2012-10-25
    • 2019-08-08
    • 1970-01-01
    • 2021-06-14
    相关资源
    最近更新 更多