0

我所知道的是,我们调用 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();
            }
        }
    }
}
4

0 回答 0