Dans Angular 1, je pourrais sélectionner l'option par défaut pour une liste déroulante en utilisant ce qui suit:
<select
data-ng-model="carSelection"
data-ng-options = "x.make for x in cars" data-ng-selected="$first">
</select>
Dans Angular 2, j'ai:
<select class="form-control" [(ngModel)]="selectedWorkout" (ngModelChange)="updateWorkout($event)">
<option *ngFor="#workout of workouts">{{workout.name}}</option>
</select>
Comment puis-je sélectionner une option par défaut étant donné que mes données d'option sont:
[{name: 'arm'}, {name: 'back'}, {name:'leg'}]
et ma valeur par défaut est back
?
[(ngModel)]
liaison donc il écoute la[selected]
liaison dans le plnkr et non dans le coden de l'OP (voir ma réponse pour un lien vers un plnr fourchu qui explique cet effet)selected="workout.name == 'back'"
réactifs:[selected]=workout.name == 'back'
"
. J'ai utilisé votre code avec une autre variable comme celle-ci[selected]="workout.name == exercise.name"
Si vous attribuez la valeur par défaut à
selectedWorkout
et utilisez[ngValue]
(ce qui permet d'utiliser des objets comme valeur - sinon seule la chaîne est prise en charge), alors il devrait simplement faire ce que vous voulez:Assurez-vous que la valeur que vous attribuez
selectedWorkout
est la même instance que celle utilisée dansworkouts
. Une autre instance d'objet même avec les mêmes propriétés et valeurs ne sera pas reconnue. Seule l'identité de l'objet est vérifiée.mettre à jour
Prise en charge angulaire ajoutée pour
compareWith
, qui facilite la définition de la valeur par défaut lorsqu'elle[ngValue]
est utilisée (pour les valeurs d'objet)À partir de la documentation https://angular.io/api/forms/SelectControlValueAccessor
De cette façon, une (nouvelle) instance d'objet différente peut être définie comme valeur par défaut et
compareFn
est utilisée pour déterminer si elles doivent être considérées comme égales (par exemple, si laid
propriété est la même.la source
[value]
place de[ngValue]
ou votre code provoque en quelque sorte la conversion de la valeur en chaîne.c1
etc2
indiquent danscompareFn
? Et aussi, comment fonctionne l'évaluation dans le corps de fonction?selectedCountries
etcountry
définissez simplement la valeur du modèle sur la valeur par défaut que vous souhaitez comme ceci:
J'ai créé un fork du plnkr de @Douglas ici pour démontrer les différentes manières d'obtenir le comportement souhaité dans angular2.
la source
<select [(ngModel)]="selectedTimeFrame"> <option *ngFor="let val of timeFrames" [ngValue]="val">val</option> </select>
Ajoutez ce code à la position o de la liste de sélection.
<option [ngValue]="undefined" selected>Select</option>
la source
Vous pouvez aborder de cette façon:
ou de cette façon:
ou vous pouvez définir la valeur par défaut de cette façon:
ou
la source
Utiliser l'index pour afficher la première valeur par défaut
la source
Selon https://angular.io/api/forms/SelectControlValueAccessor, vous avez juste besoin de ce qui suit:
theView.html:
theComponent.ts
la source
J'ai eu un peu de mal avec celui-ci, mais j'ai fini avec la solution suivante ... peut-être que cela aidera quelqu'un.
Modèle HTML:
Composant:
la source
Complètement étoffé d'autres articles, voici ce qui fonctionne dans le démarrage rapide Angular2,
Pour définir la valeur par défaut du DOM: avec
*ngFor
, utilisez une instruction conditionnelle dans l' attribut<option>
'sselected
.Pour définir la
Control
valeur par défaut de: utilisez son argument constructeur. Sinon, avant une modification lorsque l'utilisateur sélectionne à nouveau une option, qui définit la valeur du contrôle avec l'attribut value de l'option sélectionnée, la valeur de contrôle sera nulle.scénario:
balisage:
la source
Vous pouvez utiliser cela
[ngModel]
au lieu de[(ngModel)]
et c'est okla source
Vous pouvez faire comme ci-dessus:
Dans le code ci-dessus, comme vous pouvez le voir, l'attribut sélectionné de l'option de répétition est défini lors de la vérification de l'index de la boucle répétée de la liste. [attr. <nom d'attribut html>] est utilisé pour définir l'attribut html dans angular2.
Une autre approche consistera à définir la valeur du modèle dans un fichier dactylographié comme suit:
la source
Ajoutez à la réponse de @Matthijs, veuillez vous assurer que votre
select
élément a unname
attribut et qu'ilname
est unique dans votre modèle html. Angular 2 utilise le nom d'entrée pour mettre à jour les modifications. Ainsi, s'il existe des noms en double ou s'il n'y a pas de nom attaché à l'élément d'entrée, la liaison échouera.la source
Ajoutez la propriété de liaison sélectionnée, mais assurez-vous de la rendre nulle, pour les autres champs, par exemple:
Maintenant ça va marcher
la source
Si vous utilisez le formulaire, il devrait y avoir un
name
champ à l'intérieur de laselect
balise.Tout ce que vous avez à faire est simplement d'ajouter
value
auoption
tag.selectedWorkout
la valeur doit être "retour", et c'est fait.la source
Si vous ne voulez pas la liaison bidirectionnelle via [(ngModel)], procédez comme suit:
Je viens de tester mon projet sur Angular 4 et ça marche! Le accountsList est un tableau d'objets Account dans lequel name est une propriété de Account.
Observation intéressante:
[ngValue] = "acct" exerce le même résultat que [ngValue] = "acct.name".
Je ne sais pas comment Angular 4 y parvient!
la source
la source
Pour moi, je définis quelques propriétés:
Puis dans le constructeur et ngOnInit
Et dans le modèle, j'ajoute ceci comme première option à l'intérieur de l'élément select
Si vous autorisez la sélection de la première option, vous pouvez simplement supprimer l'utilisation de la propriété disabledFirstOption
la source
Dans mon cas, ici
this.selectedtestSubmitResultView
est défini avec une valeur par défaut basée sur des conditions et une variabletestSubmitResultView
doit être identique àtestSubmitResultView
. Cela a en effet fonctionné pour moiPour plus d'informations,
la source
J'ai déjà rencontré ce problème et je l'ai résolu avec une solution de contournement simple
Pour votre Component.html
Ensuite, dans votre component.ts, vous pouvez détecter l'option sélectionnée en
la source
fonctionne très bien comme vu ci-dessous:
la source
Il vous suffit de mettre le ngModel et la valeur que vous souhaitez sélectionner:
la source