为什么在angularjs 2中更改布尔值时,ngOnchanges不会触发

时间:2016-09-28 07:54:08

标签: javascript angular

我在这个问题上看到了类似的问题,但没有答案对我有用。我有一个布尔值,只要异步任务完成就会改变,但奇怪的是,ngonchages不会随时更改。以下是我的代码:

import {
    Component,
    OnChanges,
    SimpleChange
} from '@angular/core';
export class HomePage implements OnChanges {

    isLoaded: boolean;

    constructor() {
        this.isLoaded = false;
        this.loadData();
    }

    loadData() {
        setTimeout(() => {
            this.isLoaded = true;
            console.log(this.isLoaded);
        }, 3000);
    }

    ngOnChanges(changes) {
        console.log("There has been a change ", changes); //this is not firing
    }
}

2 个答案:

答案 0 :(得分:2)

ngOnChanges是Angulars更改检测机制的生命周期回调,当Angulars数据绑定更改@Input()时调用它

当你有

@Input() isLoaded: boolean;

<home-page [isLoaded]="someValue">
父组件中的

someValue已更改,然后更改检测更新isLoaded并调用ngOnChanges()

对于您的情况,最简单的解决方案可能是使用getter而不是属性:

_isLoaded: boolean;
set isLoaded(value:bool) {
  this._isLoaded = value;
  this.doSomething(value)
}
get isLoaded() {
  return this._isLoaded;
}

答案 1 :(得分:0)

作为输入处理的属性(检查更改的一部分)应标记为@Input

@Input()
isLoaded: boolean;