2017-10-18 3 views
2

J'ai un objet comme ceci:angulaire ng-options présélectionner une valeur en utilisant une option source de données

$scope.properties = { 
    1: 'Option A', 
    2: 'Option B', 
    3: 'Option C' 
}; 

Et une variable ng-model comme ceci:

$scope.selectedValue = 2; 

Et quelques balises comme ceci:

<select ng-options="key as value for (key, value) in ctl.properties" 
     ng-model="ctl.selectedValue"> 
</select> 

Mais il ne semble absolument pas possible de présélectionner une valeur de cette liste déroulante par sa valeur. J'ai réussi à le faire fonctionner si je régler la valeur sélectionnée comme ceci:

$scope.selectedValue = 'Option B'; 

Comment diable puis-je obtenir le <select> d'effectuer une pré-sélectionner en utilisant la valeur de l'option (la clé de l'objet) pas texte d'option réel.

Veuillez noter que je n'utilise pas un tableau d'objets comme la plupart des articles que j'ai trouvé. Je viens d'avoir un objet. Je ne veux pas non plus le changer en un tableau d'objets. Il doit y avoir un moyen de le faire.

Merci beaucoup.

+0

Quelle version d'angulaire utilisez-vous? –

Répondre

2

La liste déroulante a besoin d'une touche de chaîne au lieu d'un numérique:

$scope.selectedValue = '2'; 

Voici un codepen à titre d'exemple.

+0

Merci beaucoup, j'étais tellement obsédé par le fait de le faire travailler avec la valeur, que je n'ai pas pensé à récupérer le texte en utilisant la valeur. –

+0

Mon plaisir, heureux je pourrais aider. –

+0

Ok, donc il y a un léger problème avec ceci, en ce que si la valeur selectedValue est la chaîne, quand vous changez ensuite la liste déroulante, le modèle ng écrase la chaîne avec la valeur réelle. Donc "Option C", s'il est choisi, met le modèle ng à "3" et cela changera le texte de l'option en "3" –