この plnkerはおそらく問題を確認する最も簡単な方法です
ViewChild を使用するときの明らかな落とし穴なのかどうかはわかりませんが、非常に奇妙です。
プランカーは 3 つの入力を示しています。
- 最初の入力は、基本的な入力と、それをフォーカスできるボタンです。
- 2 番目の入力は同じ値にバインドされており、[編集] をクリックすると入力のロックが解除されます。
- 3 番目の入力も同じ値にバインドされており、[編集] をクリックすると入力のロックが解除され、フォーカスが与えられます。
ただし、ViewChild を追加して入力への参照を取得すると、入力に対する NgModel バインディングが機能しなくなります。ただし、アタッチする他のバインド (無効化など) は引き続き機能します。app/extended.component の 52 行目をコメントアウトすると、再びバインドされますが、明らかにフォーカスできなくなります。
最初の入力/ボタンは、これが明らかに、拡張しているクラスのプロパティにバインドしている場合にのみ問題であることを示しています。
つまり、ViewChild を介して入力にアクセスすると、NgModel へのバインディングが壊れます。
つまり、プロパティ「someValue」を持つベースが与えられた場合:
@Component({
selector: 'binding-working',
template: `<input type="text" [(ngModel)]="someValue" />`
})
export class Working extends Base<string> {
constructor() { }
};
バインドしない:
@Component({
selector: 'binding-broken',
template: `<input type="text" #imBroken [(ngModel)]="someValue" />`
})
export class Broken extends Base<string> {
@ViewChild('imBroken') input;
constructor() { }
};