Estou usando o Angular 2 (TypeScript).
Quero fazer algo com a nova seleção, mas o que recebo onChange()
é sempre a última seleção. Como posso obter a nova seleção?
<select [(ngModel)]="selectedDevice" (change)="onChange($event)">
<option *ngFor="#i of devices">{{i}}</option>
</select>
onChange($event) {
console.log(this.selectedDevice);
// I want to do something here with the new selectedDevice, but what I
// get here is always the last selection, not the one I just selected.
}
angular
typescript
Hongbo Miao
fonte
fonte
selectedDevice
quando o usuário seleciona um item diferente e 2) seselectedDevice
definirmos o valor de , o NgModel atualizará automaticamente a exibição. Como também queremos ser notificados de uma alteração, adicionei a(change)
associação de eventos. Não devemos ter que fazer dessa maneira ... devemos poder dividir a ligação de dados bidirecional[ngModel]="selectedDevice" and (ngModelChange)="onChange($event)"
, mas, como descobri,onChange()
é chamado duas vezes para cada lista de seleção alterada dessa maneira.<option *ngFor="#course of course_array #i=index" #newone value={{course.id}} >{{course.course_name}}</option>
course.course_name
ecourse.id
ambos, como posso enviar esses dois via (alterar) função?$event
variável / símbolo especial faz parte do "contexto da instrução" que as instruções do modelo Angular possuem. Se em vez disso eu escrevi(ngModelChange)="onChange('abc')"
,newValue
obteria a stringabc
. É apenas uma chamada de função JavaScript normal.Você pode passar o valor de volta para o componente, criando uma variável de referência na tag select
#device
e passando para o manipulador de alterações, queonChange($event, device.value)
deve ter o novo valorfonte
ngModel
aqui, está vinculando a uma nova variável chamadadevice
.[(ngModel)]
daquiBasta usar [ngValue] em vez de [value] !!
fonte
(change)="selectOrg(selectedOrg)"
chama a função selectOrg com a seleção atual / anterior, não a opção recém-selecionada. Eu descobri, eu nem preciso disso(change)
.Corri para esse problema enquanto fazia o tutorial Angular 2 forms (versão TypeScript) em https://angular.io/docs/ts/latest/guide/forms.html
O bloco de seleção / opção não estava permitindo que o valor da seleção fosse alterado ao selecionar uma das opções.
Fazer o que Mark Rajcok sugeriu funcionou, embora eu esteja me perguntando se há algo que eu perdi no tutorial original ou se houve uma atualização. De qualquer forma, adicionar
para hero-form.component.ts na classe HeroFormComponent
e
para hero-form.component.html no
<select>
elemento fez com que funcionassefonte
use selectionChange na angular 6 e acima. exemplo
(selectionChange)= onChange($event.value)
fonte
Outra opção é armazenar o objeto em valor como uma string:
componente:
Essa foi a única maneira de obter o trabalho de ligação bidirecional para definir o valor de seleção no carregamento da página. Isso ocorreu porque minha lista que preenche a caixa de seleção não era exatamente o mesmo objeto ao qual minha seleção estava vinculada e precisa ser o mesmo objeto, não apenas os mesmos valores de propriedade.
fonte
Eu usei isso para a lista suspensa de material angular. funciona bem
fonte
A versão 3.2.0 iônica mais recente foi modificada (mudança) para (ionChange)
por exemplo: HTML
TS
fonte
Angular 7/8
A partir do angular 6, o uso da propriedade de entrada ngModel com a diretiva de formulários reativos foi descontinuado e completamente removido no angular 7+. Leia o documento oficial aqui.
Usando a abordagem de formulário reativo, você pode obter / definir os dados selecionados como;
fonte
No Angular 5 eu fiz da seguinte maneira. obtenha o objeto $ event.value em vez de $ event.target.value
fonte
No Angular 8 você pode simplesmente usar "selectionChange" assim:
fonte