7

Ho un semplice elenco ng-repeat, in cui sto assegnando valore elemento dell'elenco corrente ad un'altra proprietà sul controller come segue:due vie che non funziona con ng-repeat

<li ng-repeat="num in list"> 
    <input type="text" ng-init="value = num" ng-model="value" /> 
    <button type="button" class="btn btn-primary" ng-click="save()">Save</button> 
    </li> 

ma quando clicco il pulsante Salva ottengo il valore predefinito impostato per $ scope.value. Mi aspetto che venga visualizzato il valore per il particolare testo di input.

Ecco il controllore:

angular.module('myApp', []) 
    .controller('MyController', function($scope){ 
     $scope.value = false; 
     $scope.list = [0, 1, 2, 3, 4]; 

     $scope.save = function() { 
     alert($scope.value); 
     } 
    }); 

Come posso accedere al valore aggiornato di un elemento di ingresso nel mio controller al momento del salvataggio chiamata di funzione.

Ecco la plunker per lo stesso: plnkr

Aggiornamento: Mi aspetto il valore da prelevare al controller senza passare come parametro.

+2

ngRepeat crea il proprio ambito. – Satpal

+0

Ok, quindi come recuperare il valore. – jsbisht

+0

È possibile passare il valore alla funzione di salvataggio, ad esempio 'ng-click =" salva (valore) "' accetta il parametro e quindi esegue la tua operazione – Satpal

risposta

0

Ecco come si può fare

<li ng-repeat="num in list"> 
    <input type="text" ng-init="value = num" ng-model="value" /> 
    <button type="button" class="btn btn-primary" ng-click="save(value)">Save</button> 
    </li> 


angular.module('myApp', []) 
    .controller('MyController', function($scope){ 
     $scope.value = false; 
     $scope.list = [0, 1, 2, 3, 4]; 

     $scope.save = function(argument) { 
     $scope.value = argument; 
     alert($scope.value); 
     } 
    }); 
+0

Mi aspetto che il valore venga prelevato sul controller senza passare effettivamente un parametro. – jsbisht

+0

secondo me questa non è l'idea dietro l'associazione dei dati. Il lavoro del controllore rispetto ad Angular è quello di impostare le funzioni e le proprietà che la vista può usare. Si prega di fare riferimento a questo [collegamento] (http://jonathancreamer.com/working-with -tutti-i-diversi-tipi-degli-ambiti-in-angolari /) –

+0

@jsbisht In questo caso non è necessario passare il valore come argomento. 'angular.module (' myApp ', []) .controller (' MyController ', function ($ scope) { $ scope.value = false; $ scope.list = [0, 1, 2, 3, 4 ]; $ scope.getValue = function() {$ scope.ValuetoSave = $ scope.value; } $ scope.save = function() {alert ($ scope.ValuetoSave); }. $ portata $ guardare ('$ scope.value', $ scope.computeNeeded); }); –

0

consente di non abusare l'espressione "vincolante a 2 vie";)

Il controller ha una portata e c'è solo un $scope.value in quel scopo. Non puoi forzare è avere più valori contemporaneamente.

ng-repeat crea un nuovo ambito per ogni li. E anche se si tenta di utilizzare $parent.value, del $scope.value il controller avrà solo l'ultimo valore assegnato in ng-init

È migliore da fare in questo caso di passare il valore come argomento. Spero che questo abbia contribuito a spiegare un po 'di più il problema. Correggimi se sbaglio

2

ngRipetere creare un ambito, quindi l'oggetto viene passato per riferimento e numero per valore. Il tuo codice è problematico, se aggiorni correttamente il valore, aggiornerà tutti i numeri in ng-repeat. Si può fare questo:

html

{{value.val}} <!-- for check the value --> 
<li ng-repeat="num in list"> 
    <input type="text" ng-model="num" /> 
    <button type="button" class="btn btn-primary" ng-click="value.val=num">Save</button> 
    </li> 

javascript

angular.module('myApp', []) 
    .controller('MyController', function($scope){ 
     $scope.value = {val:false}; 
     $scope.list = [0,1,2,3,4]; 
}); 

http://jsfiddle.net/oq6zdeLd/

Mi dispiace per il mio inglese ...

8

Wo w Non posso credere che molte persone abbiano perso questo. Se si utilizza Angular 1.2, è necessario verificare la parola chiave track by nella direttiva ngRepeat.

<li ng-repeat="num in list track by $index"> 
    <input type="text" ng-model="list[$index]" /> 
    <button type="button" class="btn btn-primary" ng-click="save()">Save</button> 
</li> 

Linea di fondo è stare lontano da tipi primitivi quando vincolante dal momento che vi darà la sincronizzazione problemi.

Per favore, dedica più tempo e sforzi alla ricerca delle tue soluzioni invece di pubblicare i punti.

Spero che questo aiuti!

Problemi correlati