2016-07-04 10 views
0

meine Watchgroup funktioniert nicht, es gibt mir undefined, mache ich etwas falsch in meinem Code?

$scope.$watchGroup([vm.footer.nrRows, vm.isSaved], function(current, original) { 

      console.log("Nr Rows "+current[0]); 
      console.log("is saved? "+current[1]); 
     }); 
+1

Sie brauchen nur sie die Variablen als 'String' setzen. – developer033

+0

Können Sie sich meine Antwort ansehen? http://stackoverflow.com/questions/38187883/multiple-variables-using-watchgroup/38188124#38188124 – developer033

Antwort

1

Ändern Sie den Code dazu:

$scope.$watchGroup(["vm.footer.nrRows", "vm.isSaved"], function() { 
    ... 
}, true); 

Wenn Ihre Variable ist $scope.something Sie sollten wie setzen in $ beobachten "something"

+0

Ich habe gerade die Änderung gemacht, und es funktioniert, wenn zuerst geladen wird, aber nachdem es nur aufgehört hat zu beobachten, ändere ich den Wert und der Beobachter arbeitet nicht. –

+0

@MarcoPereira Überprüfen Sie die aktualisierte Antwort. pass "wahr" für den zweiten Param. –

+0

Ja, ich habe diesen Parameter auch hinzugefügt, aber Sill nicht beobachten –

0

Hier ist ein Ausschnitt Arbeits:

var app = angular.module('app', []); 
 

 
app.controller('mainCtrl', function ($scope) { 
 
    $scope.footer = {}; 
 
    $scope.footer.nrRows = 5; 
 
    $scope.isSaved = true; 
 
    $scope.$watchGroup(['footer.nrRows', 'isSaved'], function(newValues, oldValues, scope) { 
 
    console.log(oldValues); 
 
    console.log(newValues); 
 
    }); 
 
});
<!DOCTYPE html> 
 
<html ng-app="app"> 
 

 
<head> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script>  
 
</head> 
 

 
<body ng-controller="mainCtrl"> 
 
    <input ng-model="footer.nrRows" /> 
 
    <span ng-bind="footer.nrRows"></span> 
 
    <hr /> 
 
    <input ng-model="isSaved" /> 
 
    <span ng-bind="isSaved"></span> 
 
</body> 
 

 
</html>

0

Ich fand diese Lösung, aber kann immer noch nicht herausfinden, was für einen Unterschied im Vergleich mit anderen Lösungen oben gemacht, nur diese Lösung für mich funktioniert. Hoffnung für jemanden, mir zu erklären, warum.

Lösung:

$scope.$watchGroup([ 
      function(){ 
       return vm.footer.nrRows; 
      }, function(){ 
       return vm.isSaved; 
      } 
     ], function(newValues, oldValues){ 
      var newProp1 = newValues[0]; 
      var newProp2 = newValues[1]; 
      console.log("newProp1"); 
      console.log(newProp1); 
      console.log("newProp2"); 
      console.log(newProp2); 
     }); 
+0

Was passiert, wenn Sie meine Lösung ausprobieren? – developer033