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:

angular-ui/ui-sélectionnez: comment définir les initiales de l'objet sélectionné correctement

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

Avez-vous trouvé une solution pour ce problème, puis d'autres pour la boucle que vous avez suggéré? Je vais avoir le même problème et je n'aime vraiment pas la recherche & remplacer chose pour la valeur initiale. Une démo en live de la question peut être trouvé au plnkr. Lors de l'utilisation régulière de liste déroulante, nous pouvons obtenir ce par le biais d'un suivi par l'expression, angulaire matériau peut le faire via 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