【发布时间】:2018-02-02 09:09:16
【问题描述】:
我有一个指令应该根据输入的 ngModel 更新一些内部值。当用户手动输入值时,这工作正常,但当 ngModel 从组件更改时停止工作。
组件模板:
<input [(ngModel)]="myValue" myExample>
在组件中更改 ngModel:
ngOnInit() {
this.getDataFromApi()
.then((result) => {
this.myValue = result;
})
}
指令:
import { Directive, OnInit } from '@angular/core';
import { NgModel } from '@angular/forms';
@Directive({
selector: '[myExample][ngModel]',
providers: [NgModel],
host: {
'(ngModelChange)' : 'onModelChange($event)',
}
})
export class myExampleDirective implements OnInit {
private _valueInDirective;
constructor(private _element: ElementRef, private _model: NgModel) { }
onModelChange(event) {
this._valueInDirective = event;
}
}
如果在 API 调用后从控制器更新 ngModel,则指令中的 ngModelChange 不会触发并且 _valueInDirective 不会更新。如何确保每次更新 ngModel 时,指令中的值也会改变?
【问题讨论】:
-
这不应该。
ngModelChange仅在输入元素值更改时发出。 -
@GünterZöchbauer,但是在 ngModel 改变之后,输入元素的值也会改变,对吧?
-
当
[ngModel]="myValue"的更改检测检测到myValue已更改时,它将更新ngModel属性。 Angular 不观察随机字段的变化,它只观察绑定。(ngModelChange)([(ngModel)]的()部分)仅在NgModel指令调用this.ngModelChange.next(someValue)时调用 -
这没什么用。我仍然不知道为什么当值明显改变时它不触发。
-
因为它只是故意设计为不这样做,而且我认为没有必要。如果确实如此,它基本上只会导致无限循环。你真正想要完成什么?更改值时,您可以自己致电
ngModelChange(...);。
标签: angular