Tenho experiência no uso de [(ngModel)]
para obter vinculação de valor bidirecional entre um campo de componente e um controle de formulário no modelo do componente e no uso de (ngModelChange)
para realizar trabalho adicional quando o valor for alterado.
// code
foo: number;
onFooUpdate($event) { /* work */ }
// template
<input [(ngModel)]="foo" (ngModelChange)="onFooUpdate($event)" />
Eu juro que li uma vez que existe um nome que pode ser usado para o manipulador, com base no nome do campo, que o aplicativo chamará por convenção quando o valor for alterado se ngModelChanged
não for especificado explicitamente. Algo como:
// code
foo: number;
fooChange($event) { /* work */ }
// template
<input [(ngModel)]="foo" />
onde, quando o valor for foo
alterado, a aplicação irá procurar um método chamado fooChange
e, se existir, irá chamá-lo. Estou tentando isso agora, alternativamente com fooChange
e fooChanged
, mas eles não estão sendo chamados e agora não consigo encontrar nenhuma informação para apoiar isso. Estou enganado?
Suponha que você crie uma propriedade com vinculação de dados bidirecional.
Então, para que isso funcione, deve existir um @Input e um @Output no filho, onde o critério é que ele tenha o name .
testChange
Ao fornecer isso no filho, você pode obter uma ligação de dados bidirecional.Acho que você entendeu mal, ao pensar que o ngModel cria automaticamente um emissor de saída com
<<prop name>>Change
, o que está errado.Se você olhar o código fonte , temos apenas
@Output() ngModelChange
, que é chamado quando o valor é alterado.Então você tem que especificá-lo manualmente para ser chamado
ngModelChange
.Você está se referindo à sintaxe de ligação bidirecional . Funciona apenas para entradas e saídas de um componente que oferece ligação bidirecional. Supondo que você tenha um componente que possui uma ligação bidirecional com uma propriedade chamada
value
, veja como serão as entradas e saídas:Aqui é importante que o nome da saída corresponda ao nome da entrada, com o sufixo
Change
. Então você pode usar a ligação bidirecional como a seguir:No entanto, isso só funciona para entradas e saídas. Não funciona para o seu cenário. Você precisa usar o código acima, mais detalhado.