webentwicklung-frage-antwort-db.com.de

AngularJS - Modell wird bei Auswahl des von ng-repeat generierten Optionsfelds nicht aktualisiert

Ich erstelle mit ng-repeat eine Reihe von Optionsfeldern und versuche dann, ein Modell zu aktualisieren, wenn eines davon ausgewählt ist. Dies scheint nicht zu funktionieren.

Das gleiche Markup funktioniert einwandfrei, wenn die Radioeingänge fest codiert sind und nicht durch ng-repeat generiert werden.

Das funktioniert:

<input type="radio" ng-model="lunch" value="chicken" name="lunch">
<input type="radio" ng-model="lunch" value="beef" name="lunch">
<input type="radio" ng-model="lunch" value="fish" name="lunch">  
{{lunch}}

Das tut nicht:

<input type="radio" ng-model="lunch" ng-repeat="m in meat" value="m" name="lunch">    
{{lunch}}

Siehe jsfiddle hier: http://jsfiddle.net/mark_up/A2qCS/1/

Jede Hilfe wäre dankbar.

Vielen Dank

47
Mark Simpson
<div ng-controller="DynamicCtrl">
    <input type="radio" ng-model="$parent.lunch" ng-repeat="m in meat"  
    ng-value="m" name="lunch">    
    {{lunch}}
</div>

Sollte den Trick machen.

Nach meinem Verständnis erstellt ng-repeat Einen eigenen $scope. Sie müssen sich also auf den $parent $scope; beziehen. Ja, AngularJS ist schwierig. Sie müssen auch den value in ng-value Ändern.

98
mpm

das obige Problem wurde besprochen hier

Dies geschieht, weil ng-repeat einen neuen Bereich erstellt. Grundsätzlich ist jeder <input> erstellt einen selectedOption-Wert in einem eigenen inneren Bereich. Erstellen Sie ein neues Containerobjekt für diesen Wert, um das umzugehen. Zum Beispiel könnten Sie in Ihrem Controller deklarieren:

$scope.data = {selectedOption: x};

Verwenden Sie dann in Ihrer Vorlage ng-model="data.selectedOption"

auf diese weise wird ng-model aktualisiert .. :)

das ist knifflig

4
Sajjad Ali Khan

Muss nur den Wert durch ng-value ersetzen

2
Daniele