【发布时间】:2017-10-13 14:20:19
【问题描述】:
在组件级别对属性更改做出反应的最佳方法是什么?我正在寻找的是一种在每次组件的某个属性发生更改时触发方法的方法。这是一个单独的组件:
@Component({selector: 'component', template: '{{name}} {{number}}'})
class singleComp {
name: string = 'Old';
number: number = 1;
changeProperties() {
this.name = 'New';
this.number = 2;
}
changesDetected() {
console.log('Changes detected');
}
}
在上面的例子中,singleComp 有两个属性name 和number。这是一个简单的例子。从changeProperties() 调用changesDetected() 不是一个选项,因为组件可能有多种方法来修改组件的属性。我不想在修改属性的每个方法的末尾调用changesDetected(),因为这意味着来自多个方法的多次调用。
我尝试使用OnChanges 和AfterContentChecked 检测更改,但它们都没有真正起作用。这些方法检测@input 属性的变化,但不检测组件内“本机”属性的变化。
简而言之,我正在寻找一种在每次修改组件的内部属性时触发changesDetected() 的方法。
编辑
ngDoCheck 确实检测到了内部变化。但是,一旦实现,它也会检测外部组件的变化,并且在组件级别上并没有真正的用处。
【问题讨论】:
-
@AnteJablanAdamović,我写了我不是在寻找
@input更改检测的问题。我感兴趣的是组件原生属性的内部变化。 -
即使
ngDoCheck确实检查内部属性更改,但每次对外部组件进行更改时也会触发它。当您想将变更检测范围扩大到组件级别时,这没有用。
标签: javascript angular typescript