入力のngModelに基づいて内部値を更新する指示があります。これは、ユーザーが手動で値を入力するとうまく動作しますが、ngModelがコンポーネントから変更されたときに機能しなくなります。ngModelがユーザー入力なしのコンポーネントから変更されたときにngModelChangeが発生しない
コンポーネントテンプレート:
<input [(ngModel)]="myValue" myExample>
は、コンポーネントにngModelを変更する:
ngOnInit() {
this.getDataFromApi()
.then((result) => {
this.myValue = result;
})
}
指令:ngModelは、APIコールの後、コントローラから更新された場合
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;
}
}
、ngModelChangeディレクティブで_valueInDirectiveは更新されません。 ngModelが更新されるたびに、directiveの値も同様に変更されるようにするにはどうすればよいですか?
とすることはできません。 'ngModelChange'は、入力要素の値が変更されたときだけ出力されます。 –
@GünterZöchbauerしかし、ngModelの変更後、入力要素の値も同様に変更されます。 – Senthe
'[ngModel] =" myValue "の変更検出で' myValue'が変更されたことが検出されると、 'ngModel'プロパティが更新されます。 Angularは変更のためにランダムなフィールドを観察しません。バインディングだけを観察します。 ''(ngModelChange) ''([ngModel]) 'の' '()' ')は、' 'NgModel'ディレクティブが' this.ngModelChange.next(someValue) 'を呼び出すときに**のみ**呼び出されます。 –