2016-05-20 4 views
1

Ich habe eine <select> Box, die ich mit einigen Objekten bevölkere. Ich gruppiere sie, in diesem Beispiel von Team, mit group by. Wenn sich jedoch ein Spielerteam ändert, wird die Gruppe nicht aktualisiert.ng-options Direktive wird nicht aktualisiert

Dies ist das Markup:

<select ng-options="player.name group by player.team for player in players"></select> 
<button ng-click="change();">Change team name</button> 

Und der Controller:

.controller('MainController', function($scope) { 
    $scope.players = [{ 
     name: 'Player one', 
     team: 'Denmark' 
     }, 
     { 
     name: 'Player two', 
     team: 'Denmark' 
     }, 
     { 
     name: 'Player three', 
     team: 'England' 
     }, 
     { 
     name: 'Player four', 
     team: 'England' 
     }, 
     { 
     name: 'Player five', 
     team: 'England' 
     } 
    ]; 

    $scope.change = function() { 
     $scope.players[0].team = 'Sweden'; 
    }; 

Here's ein mein Problem JSFiddle demonstriert.

Warum wird der Teamname nicht aktualisiert, wenn er geändert wird?

+0

Hinzufügen von 'track by player.team' at Das Ende des 'ngOptions'-Ausdrucks scheint Ihr Problem zu lösen, aber die Frage ist * warum * ... – sp00m

+0

@ sp00m Die Verwendung von' track by player.team' bricht die Auswahl. Wenn Sie [this] (http://jsfiddle.net/fhyc 96rx/2 /) und versuchen Sie Player 3 auszuwählen, Player 5 wird ausgewählt. –

Antwort

1

bitte im Bereich „Komplexe Modelle (Objekte oder Sammlungen)“ in https://docs.angularjs.org/api/ng/directive/ngOptions

AngularJS nur das Objekt mit Referenzspuren, wenn weder „Track von“ gegeben wird oder der „mehr“ Flag gesetzt.

Sie haben ein paar Optionen:

leicht gefallen wäre „Spur hinzufügen, indem Sie (player.name + '|' + player.team), aber das ist ein wenig hackish

Or. Andernfalls erstellen Sie in Ihrer Änderungsmethode ein neues Objekt: $ scope.players [0] = {name: $ scope.players [0] .name, team: "Sweden"}