J'ai rencontré un problème lors de la présélection de valeurs dans une liste déroulante en Angular 2.
J'ai défini un tableau de couleurs dans le composant que je lie avec succès à la liste déroulante. Le problème que je rencontre concerne la présélection d'une valeur à l'ouverture de la page.
La ligne [selected]="car.color.id == x.id"
doit sélectionner la valeur qui a été fixée sur le modèle de la voiture. this.car.color = new Colour(-1,'');
Cependant, cela ne fonctionne que si je fixe l'identifiant de la couleur de la voiture au dernier élément de la liste (dans ce cas, noir). this.car.color = new Colour(4,'');
J'utilise la dernière version d'Angular (rc3) et j'ai rencontré les mêmes problèmes dans rc1 et rc2.
Voici un plunker qui montre le problème.
https://plnkr.co/edit/yIVEeLK7PUY4VQFrR48g?p=preview
Un autre aspect étrange est qu'en regardant les méta-données, Angular a mis la valeur sélectionnée à true.
Mais la liste déroulante reste vide.
Il semble qu'il s'agisse d'un problème distinct de ces questions connexes.
Angulaire 2 Définir la valeur de départ de la sélection
Lier un élément de sélection à un objet en Angular 2
Comment utiliser select/option/NgFor sur un tableau d'objets en Angular2
Salutations
Steve
Modèle de composant
<div>
<label>Colour</label>
<div>
<select [(ngModel)]="car.colour"">
<option *ngFor="let x of colours" [value]="x.id" [selected]="car.color.id == x.id">{{x.name}}</option>
</select>
</div>
</div>
Composant
import { Component, OnInit } from '@angular/core';
import {AbstractControl,FORM_DIRECTIVES } from '@angular/common';
@Component({
selector:'dropdown',
templateUrl:'app/components/dropdown/dropdown.component.html',
directives:[FORM_DIRECTIVES]
})
export class DropdownComponent implements OnInit
{
car:Car = new Car();
colours = Array<Colour>();
ngOnInit(): void {
this.colours = Array<Colour>();
this.colours.push(new Colour(-1, 'Please select'));
this.colours.push(new Colour(1, 'Green'));
this.colours.push(new Colour(2, 'Pink'));
this.colours.push(new Colour(3, 'Orange'));
this.colours.push(new Colour(4, 'Black'));
this.car = new Car();
this.car.color = new Colour(-1,'');
}
}
export class Car
{
color:Colour;
}
export class Colour
{
constructor(id:number, name:string) {
this.id=id;
this.name=name;
}
id:number;
name:string;
}