J'ai un lien choisir
<select ng-model="collegeSelection" ng-options="c as c.CollegeName for c in colleges" ng-selected="c.CollegeName == collegeSelection.CollegeName" name="selectCollege" id="selectCollege"></select>
mais lorsque c.CollegeName == collegeSelection.CollegeName correspond à l'élément, il n'est toujours pas sélectionné. La documentation ne semble pas aider. Des idées?
ng-selected
doit être utilisé dans la balise <option>
et non dans la balise <select>
. Examinez de plus près son doc et son exemple.
Car la détermination de l'option sélectionnée par la directive select
est basée sur ngModel
. Par conséquent, une fois que vous supprimez ng-selected="c.CollegeName == collegeSelection.CollegeName"
, votre code devrait fonctionner.
J'ai créé un très simple plunk pour montrer la fonctionnalité "sélectionné" dans la directive select
.
AngularJS utilise la directive ngModel
pour activer la "liaison de données bidirectionnelle" entre votre modèle et les éléments de l'interface utilisateur.
Dans le cas de "select", le modèle collegeSelection
que vous avez spécifié comme <select ng-model="collegeSelection" ...>
est l'élément sélectionné. Ce qui signifie que si un utilisateur sélectionne un élément dans la liste déroulante de la page, collegeSelection
sera défini sur cet élément; et , si vous définissez collegeSelection
sur un élément de votre code javascript, AngularJS s'assurera que le <option>
correspondant est sélectionné.
Supposons que vous ayez le code suivant dans votre contrôleur:
$scope.colleges = [
{id: 0, name: 'a'},
{id: 1, name: 'b'},
{id: 2, name: 'c'}
];
$scope.collegeSelection = $scope.colleges[0];
Et le HTML ressemble à:
<select ng-model="collegeSelection" ng-options="c as c.name for c in colleges"></select>
C'est tout! Le premier collège dans le tableau des collèges sera sélectionné si vous exécutez le code.
Rappelez-vous simplement collegeSelection
est l'option sélectionnée, que ce soit parce que l'utilisateur a sélectionné un élément de l'interface utilisateur ou que vous avez sélectionné un élément en javascript.
C'est ainsi que fonctionne la liaison de données bidirectionnelle.
Après avoir joué avec ng-selected
pendant un moment, je n’étais pas capable de le faire fonctionner comme vous le demandez. Cependant, j'ai pu présélectionner une option spécifique en utilisant ng-init
.
Voici un JSFiddle de ma solution. Mon <select>
a fini par être:
<select ng-model="selectedColor" ng-options="color.value as color.name for color in colors" ng-init="selectedColor='yellow'">
<option value="">Select A Color</option>
</select>`
Et mon tableau colors
est:
colors = [
{name:'Red', value: 'red'},
{name:'Orange', value: 'orange'},
{name:'Yellow', value: 'yellow'},
{name:'Green', value: 'green'},
{name:'Blue', value: 'blue'},
{name:'Indigo', value: 'Indigo'},
{name:'Violet', value: 'Violet'}
]
Changer le ng-init="selectedColor='yellow'"
en une autre valeur sélectionnera une autre option.
Certaines personnes ont des problèmes avec cela. J'ai trouvé une excellente solution pour un simple menu déroulant si controller as someController
var vm = this;
this.colors = [
{name:'Red'},
{name:'Orange'},
{name:'Yellow'},
{name:'Green'},
{name:'Blue'},
{name:'Indigo'},
{name:'Violet'}
];
this.color_selected = "Yellow";
<select ng-model="someController.color_selected" ng-options="opt.name as opt.name for opt in someController.colors">
</select>
`
J'ai eu un problème similaire et j'ai réalisé que la cause était due aux différents types de données. ng-model
comparait une valeur de chaîne, mais je tirais un entier de la base de données afin que l'option ne soit pas automatiquement sélectionnée. Pour surmonter cela, j'ai appelé toString()
sur l'entier après avoir interrogé les données de la base de données pour s'assurer que les types de données correspondaient.