在Angular 9中,指令的ngOnChanges
方法不会对属性进行触发。这是因为在Angular 9中,指令的ngOnChanges
方法只会在输入属性的引用发生变化时触发,而不会检测输入属性的值是否发生变化。
要解决这个问题,可以使用SimpleChanges
参数来检测输入属性的值是否发生变化。SimpleChanges
参数是一个键值对,其中键是属性名称,值是一个包含previousValue
和currentValue
的对象。
以下是一个解决方法的代码示例:
import { Directive, Input, OnChanges, SimpleChanges } from '@angular/core';
@Directive({
selector: '[myDirective]'
})
export class MyDirective implements OnChanges {
@Input() myProperty: any;
ngOnChanges(changes: SimpleChanges) {
if (changes.myProperty && changes.myProperty.currentValue !== changes.myProperty.previousValue) {
// 输入属性的值发生变化时执行的代码
console.log('myProperty changed', changes.myProperty.currentValue);
}
}
}
在上面的示例中,我们首先导入了OnChanges
和SimpleChanges
,然后在指令中实现了OnChanges
接口。
在ngOnChanges
方法中,我们使用changes.myProperty
来检测myProperty
输入属性的变化。如果myProperty
的当前值与先前值不相等,就执行相应的代码。
这样,我们就可以在Angular 9中手动检测输入属性的值是否发生变化,并在需要时执行相应的操作。