2013-07-09 12 views
21

ho creato un violino qui: http://jsfiddle.net/nicktest2222/W4VaA/

voglio solo essere in grado di colpire il pulsante di reset e mettere i miei valori originali indietro. Qualcuno sa qual è il modo migliore per farlo?

Grazie in anticipo

function TodoCtrl($scope) { 
    $scope.data = [ 
    {text:'learn angular', done:true}, 
    {text:'build an angular app', done:false}]; 

    $scope.orig = [$scope.data]; 

    $scope.reset = function() { 
    $scope.data = $scope.orig; 
    }; 

} 

risposta

44

The problem is in JS clone mechanics. Tutto quello che dovete fare è quello di creare una copia completa del modello:

function TodoCtrl($scope) { 
    $scope.data = [ 
     {text:'learn angular', done:true}, 
     {text:'build an angular app', done:false} 
    ]; 

    $scope.orig = angular.copy($scope.data); 

    $scope.reset = function() { 
     $scope.data = angular.copy($scope.orig); 
    }; 
} 

Here is the updated fiddle.

+2

Mio Dio .... dopo 2,5 ore di mal di testa, ho trovato questa soluzione geniale. Sono andato a farlo in modo stupido: trovare l'indice dell'oggetto che è stato modificato dall'array e ottenere una copia dell'originale Questo è molto più breve e più dolce! Grazie mille – Mark

+0

Ho provato un modo simile ma funziona in caso di abbandoni. Stava reimpostando il menu a discesa invece di tornare al valore selezionato da ng, $ route.reload() ha fatto il trucco per me. –

14

L'opzione più semplice è quella di utilizzare angular.copy per clonare i dati originali, e poi di nuovo per ripristinare i dati in $scope.

function TodoCtrl($scope) { 
    $scope.data = [ 
    {text:'learn angular', done:true}, 
    {text:'build an angular app', done:false} 
    ]; 

    var originalData = angular.copy($scope.data); 
    $scope.reset = function() { 
    angular.copy(originalData, $scope.data); 
    }; 
} 

Edit: angular.copy quando fornito due valori svuotare l'oggetto o matrice di destinazione prima di copiare i valori di origine ad esso. Questo può essere davvero utile quando si tratta di ambiti figlio.

+2

Questo è l'unico dei 3 risposte che funziona quando si utilizza 2 modo vincolante. (per esempio, in una finestra di dialogo modale che utilizza resolve: {data: function() {return $ scope.dataFromParentScope}}. Capisco che cosa intendi quando è migliore quando si ha a che fare con ambiti figlio. – parliament

+0

Ho provato un modo simile ma funziona a dint in caso di menu a discesa, Reimpostando il menu a discesa invece di tornare al valore selezionato da ng, $ route.reload() ha fatto il trucco per me. Sarebbe bello se riuscissi a trovare un violino per dimostrare che funzionava –

7

madhead funziona inizialmente, ma in seguito i dati punta a $ scope.orig e reset non funzionerebbe più. Avrebbe bisogno di fare una copia nel reset per farlo funzionare anche. Il lavoro di

Editted madhead: http://jsfiddle.net/W4VaA/2/

function TodoCtrl($scope) { 
    $scope.data = [ 
    {text:'learn angular', done:true}, 
    {text:'build an angular app', done:false} 
    ]; 

    $scope.orig = angular.copy($scope.data); 

    $scope.reset = function() { 
    $scope.data = angular.copy($scope.orig); 
    }; 
} 
Problemi correlati