10
votes

Angularjs Dropdown ne montre pas la valeur sélectionnée

AM Face à un problème dans l'affichage de la valeur sélectionnée dans la liste déroulante angulaire. Ça marche lorsque je donne comme ça xxx

ne fonctionne pas, si je donne directement cette valeur xxx

html : xxx

JS : xxx

codépen: http://codepen.io/anon/pen/zxxpmr

< Strong> Solution:

Merci Samir-das. J'ai corrigé selon votre suggestion. xxx


0 commentaires

4 Réponses :


6
votes

Eh bien, parce que

$ étendue.items [1] et {nom: 'Deux', Âge: 27} est totalement différent.

{Nom: 'Two', Âge: 27} est un objet totalement différent, tandis que $ étendue.items [1] fait partie de l'objet $ périmètre.items

Lorsque vous mettez quelque chose dans le modèle en utilisant {{}} , angulaire l'ajoutez dans sa liste d'observateurs.

Alors, lorsque l'angulaire le mettez-le dans la liste de surveillance, c'était un objet (c.-à-d. {Nom: 'Two', Âge: 27} ) qui est différent de $ étendue.items < / code>.

SEXEYItem est connecté avec l'objet que vous avez défini dans le contrôleur. En résumé, tandis que la vérification sale, angular vérifiera sélectionnétem contre {nom: 'Two', Âge: 27} pas contre $ étendue.items < / p>

J'espère que vous comprenez ce que je veux dire


2 commentaires

Avez-vous un moyen de résoudre ce problème?


Vous devrez utiliser le même objet. Vous pouvez rechercher d'abord l'article par lequel vous souhaitez démarrer, puis assigner cet élément trouvé



1
votes

Ceci est pas une fonctionnalité / un problème angulaire, c'est une conséquence de la fonctionnement de l'égalité d'objet dans JavaScript. Cet article fait un assez bon travail en expliquant Ce qui se passe d'une manière assez concise et donne quelques exemples. Consultez la source de La méthode isequale de Lodash ( Il vous mènera à la définition de baseisequaldeep finalement) pour voir comment ce que vous essayez d'atteindre peut être fait dans Pure JS.

Dans tous les cas, je ne pense pas qu'il y ait un moyen facile d'y parvenir en angulaire, vous devrez ré-écrire comment ng-options fonctionne et vous ne voulez probablement pas aller Là ...


0 commentaires

1
votes

dans des objets angulaires, des tableaux et des objets sont passés par référence tandis que les cordes, les nombres et les booléens sont passés par la valeur. Ainsi, angulaires interprète $ étendue.items [1] et {nom: 'Two', Âge: 27} comme deux objets différents. C'est pourquoi votre reliure échoue lorsque vous faites $ Poption.SelectedItem = {Nom: 'Deux', Âge: 27}; directement et trouvez-le dans '$ SPAND.ITEMS'.


0 commentaires

7
votes

Comme expliqué dans les autres réponses, tandis que les deux objets peuvent avoir les mêmes propriétés et les mêmes valeurs, ils sont deux objets différents si angulaires ne les considèrent pas égaux.

Vous pouvez cependant utiliser la piste par Expression dans NG- Options pour spécifier une propriété qui décidera de l'égalité:

ng-options = "item.name pour l'élément dans les éléments Piste par élément.name"

http://codepen.io/anon/pen/wbwmrp


0 commentaires