2017-10-19 15 views
-1

Je souhaite utiliser la valeur sélectionnée dans la liste déroulante de ma classe de composants. Lorsqu'une valeur est sélectionnée depuis le menu déroulant, cette valeur est stockée avec ngModel, mais cela ne fonctionne pas. J'ai également essayé une autre méthode, à savoir déclencher une fonction d'événement et passer la valeur sélectionnée comme paramètre.La valeur sélectionnée dans la liste déroulante ne fonctionne pas Angulaire

<select [(ngModel)]="selectedControl" class="form-control" (click)="onSelection($event)"> 
      <option *ngFor="let control of controlArray; let i=index" 
      [value]="control">{{controlArray[i].name}}</option>            
</select> 

Quand je sortie la valeur sélectionnée sur la console, il ne montre pas, voici le code de classe de composant:

onSelection(control){ 
    console.log(typeof(control)) 
    console.log(control.target.value) 
    } 

S'il vous plaît aider.

+0

Vous ne consignez jamais la valeur sélectionnée. Vous consignez l'événement ($ event) transmis à la méthode. Ne passez pas l'événement à la méthode, et enregistrez simplement 'this.selectedControl', puisque c'est ce qui est lié avec ngModel. De plus, l'événement ne devrait pas être (cliquer), mais (changer). –

+0

J'ai également essayé cette solution auparavant, mais en enregistrant this.selectedControl "[object Object]" s'affiche en sortie plutôt que la valeur sélectionnée. –

+3

Vous avez probablement besoin de lier '' [ngValue] 'au lieu de' [value] ', car l'attribut natif utilise uniquement des chaînes. – rinukkusu

Répondre

0

Vous devez utiliser l'événement change, non click:

<select [(ngModel)]="selectedControl" class="form-control" (change)="onSelection()"> 
    <option *ngFor="let control of controlArray; let i=index" 
      [ngValue]="control">{{controlArray[i].name}}</option> 
</select> 

Aussi, vous devriez vérifier la selectedControl pour la valeur sélectionnée.

onSelection(){ 
    console.log(this.selectedControl) 
} 

La dernière chose - vous devez y mettre une valeur scalaire si vous voulez le faire comme ceci ou utiliser ngValue à la place.

+0

Je ne suis pas très clair sur le plan conceptuel, pourriez-vous s'il vous plaît référer certains liens de données sur ce concept. - –

+0

Que voulez-vous dire exactement? cliquez sur vs changer d'événement? ou ngValue? –

+0

Je ne suis pas clair entre ngValue et la valeur de liaison. –