我所知道的是,我们调用 detectChanges() 来触发本地更改检测检查。我已经看到了一些在 ngOnChanges(change) 钩子中调用 detectChanges() 的代码,我想知道为什么有人想做这样的事情?我的意思是,如果未检测到更改检测,则不会调用 ngOnChanges 对吗?那么为什么要在钩子体内调用detectChanges呢?
@Directive({
selector: "[dateDisplay]"
})
export class DateDisplayDirective {
@Input() ngModel: Date;
@Input() format: string;
constructor(private _elem: ElementRef, private _change: ChangeDetectorRef) { }
ngOnChanges(change) {
if (change.ngModel && change.ngModel.currentValue && change.ngModel.currentValue != change.ngModel.previousValue) {
let date = this.ngModel ? moment.utc(this.ngModel) : null;
if (this._elem.nativeElement.value != undefined) {
this._elem.nativeElement.value = date ? date.format(this.format) : "";
this._change.detectChanges();
}
}
}
}