angular-ui/ui-sélectionnez: comment définir les initiales de l'objet sélectionné correctement
C'est mon interface utilisateur de sélectionner dans la vue:
<ui-select ng-model="selectedLabel.selected" ng-disabled="fetchingLabels || working">
<ui-select-match placeholder="">{{$select.selected.code}}</ui-select-match>
<ui-select-choices repeat="label in labels| filterBy: ['name', 'code']: $select.search">
<div ng-bind-html="label.code | highlight: $select.search"></div>
<small ng-bind-html="label.name | highlight: $select.search"></small>
</ui-select-choices>
</ui-select>
Et c'est le code dans mon controller:
$scope.labels = [];
$scope.selectedLabel = {};
$scope.selectedLabel.selected = $scope.passedLabel; //This is an object passed
//from the previous controller.
//The scope comes with it.
$scope.fetchLabels(); //This fetches the labels from the server
//and puts them in $scope.labels
Les étiquettes portées à partir du serveur sont théoriquement comme celles-ci:
[{'labelId': 20, 'code': 'L20', 'name': 'some label'},
{'labelId': 21, 'code': 'L21', 'name': 'other label'}, ...]
Et le passé de l'-en dehors de l'étiquette, 'passedLabel', est théoriquement comme l'UN de ceux $scope.labels
trop, par exemple:
passedLabel = {'labelId': 21, 'code': 'L21', 'name': 'other label'}
...Je dis théoriquement parce que, empiriquement, je vois qu'ils sont différents à cause de ce qui angulaire ajoute à eux (par exemple. $$hashKey
, ou __proto__
).
Donc, à cause de qui différence, le $scope.selectedLabel.selected = $scope.passedLabel
n'est pas correspondant à l'élément correspondant dans l'interface utilisateur-sélectionnez (ils ne sont pas le même objet), et donc, le résultat est de ce comportement:
Comment puis-je définir la sélection initiale correctement? est-il une manière que je peux utiliser des id à la place de l'objet de comparaison? Je veux éviter d'avoir un for
comme ceci:
for (i=0; i<$scope.labels; i++) {
if ($scope.labels[i].labelId == $scope.passedLabel.labelId) {
$scope.selectedLabel.selected = $scope.labels[i]
}
}
qui je suis assez sûr qu'elle fonctionne comme prévu, mais je devrais l'appeler que for
après l'ajax est revenu... et j'ai d'autres de l'interface utilisateur sélectionne trop
ng-model="foo" ng-model-options="{ trackBy: '$value.id' }"
. J'ai vraiment envie de faire quelque chose de similaire avec de l'interface utilisateur, sélectionnez ...non, je n'ai pas trouver une solution, désolé... j'ai fini par répéter l'élément sélectionné, c'est: L'initiale de l'élément sélectionné est au top (bien, sélectionné) et si vous faites défiler vers le bas, vous pouvez encore le trouver quelque part dans la liste.
OriginalL'auteur sports | 2014-11-24
Vous devez vous connecter pour publier un commentaire.
Si vous voulez atteindre l'état que vous l'avez mentionné, puis il suffit de passer la référence de votre modèle.
Ainsi, après le succès de la fetchlabel d'appel vous permet de définir les valeurs dans les étiquettes. Maintenant dans la réussite de cette fonction, vous devez appeler la fonction qui récupère
presentLabel
.Dès que vous obtenez les données de l'étiquette présent vous pouvez obtenir l'index de l'objet dans les étiquettes de champ.
Cela permettra de résoudre votre problème.
_.find()
est en quelque sorte similaire à lafor
j'ai eu à la fin de mon post?Oui, vous obtenez le même résultat. Cependant souligner est vivement recommandé d'utilité, car il donne de la lisibilité
OriginalL'auteur Aditya Sethi