J'essaie d'obtenir la boîte de sélection pour commencer avec une option pré-remplie en utilisant ng-repeat avec AngularJS 1.1.5. Au lieu de cela, la sélection commence toujours par rien de sélectionné. Il a également une option vide, dont je ne veux pas. Je pense qu'il y a un effet secondaire du fait que rien n'est sélectionné.
Je peux faire fonctionner cela en utilisant ng-options au lieu de ng-repeat, mais je veux utiliser ng-repeat pour ce cas. Bien que mon exemple réduit ne le montre pas, je souhaite également définir l'attribut title de chaque option, et il n'y a aucun moyen de le faire en utilisant ng-options, pour autant que je sache.
Je ne pense pas que cela soit lié au problème commun de portée / héritage prototypique AngularJs. Au moins, je ne vois rien d'évident lors de l'inspection à Batarang. De plus, lorsque vous choisissez une option dans la sélection avec l'interface utilisateur, le modèle se met à jour correctement.
Voici le HTML:
<body ng-app ng-controller="AppCtrl">
<div>
Operator is: {{filterCondition.operator}}
</div>
<select ng-model="filterCondition.operator">
<option
ng-repeat="operator in operators"
value="{{operator.value}}"
>
{{operator.displayName}}
</option>
</select>
</body>
Et le JavaScript:
function AppCtrl($scope) {
$scope.filterCondition={
operator: 'eq'
}
$scope.operators = [
{value: 'eq', displayName: 'equals'},
{value: 'neq', displayName: 'not equal'}
]
}
JS Fiddle pour cela: http://jsfiddle.net/coverbeck/FxM3B/2/
la source
Réponses:
D'ACCORD. Si vous ne souhaitez pas utiliser la méthode correcte
ng-options
, vous pouvez ajouter unng-selected
attribut avec une logique de vérification de condition pour que laoption
directive fasse fonctionner la présélection.Working Demo
la source
Pour la balise select, angular fournit la directive ng-options. Il vous donne le cadre spécifique pour configurer les options et définir une valeur par défaut. Voici le violon mis à jour utilisant ng-options qui fonctionne comme prévu: http://jsfiddle.net/FxM3B/4/
HTML mis à jour (le code reste le même)
la source
Merci à TheSharpieOne pour avoir signalé l'option ng-selected. Si cela avait été affiché comme une réponse plutôt que comme un commentaire, j'aurais donné la bonne réponse.
Voici un JSFiddle fonctionnel: http://jsfiddle.net/coverbeck/FxM3B/5/ .
J'ai également mis à jour le violon pour utiliser l'attribut title, que j'avais omis dans mon message d'origine, car ce n'était pas la cause du problème (mais c'est la raison pour laquelle je veux utiliser ng-repeat au lieu de ng-options) .
HTML:
JS:
la source
Le fait qu'angular injecte un élément d'option vide dans la sélection est que l'objet de modèle qui lui est lié par défaut est livré avec une valeur vide lors de l'initialisation.
Si vous souhaitez sélectionner une option par défaut, vous pouvez probablement la définir sur l'oscilloscope dans le contrôleur
Si vous voulez un espace réservé d'option vide, cela fonctionne pour moi
la source
Comme suggéré, vous devez utiliser ng-options et, malheureusement, je pense que vous devez référencer l'élément de tableau par défaut (à moins que le tableau ne soit un tableau de chaînes).
http://jsfiddle.net/FxM3B/3/
Le JavaScript:
Le HTML:
la source
Si vous utilisez md-select et ng-repeat ing md-option à partir d'un matériau angulaire, vous pouvez ajouter
ng-model-options="{trackBy: '$value.id'}"
à la balise md-select ash montrée dans ce styloCode:
la source