2017-02-24 4 views
0

In meinem Controller möchte ich benachrichtigt werden, wenn ein variabler Wert geändert wird. Meine Anforderung ist, wenn sich der Wert einer Variablen ändert, wird eine Funktion aufgerufen. Also benutze ich $ watch. Mein Code ist wie folgt.

var Canvas = angular.module('canvas'); 

Canvas.controller("excelOperation",function($scope,Data,SharedData,$http){ 

    $scope.tbody=$scope.$parent.shared.previews; 

    $scope.$watch('$parent.shared.previews',function(newVal,oldVal){ 
     console.log("WORKING"); 
    }) 

    setInterval(function(){ 
     console.log($scope.$parent.shared.previews); 
    },1000) 

    /** 
    * Populate table function to populate excel table 
    */ 
    $scope.populateTable=function() 
    { 

    } 
}) 

angular.bootstrap (document.getElementById ("Seite"), [ 'Leinwand']);

Aber Problem ist $ watch funktioniert nur, wenn ich meine Seite aktualisieren. Obwohl der setInterval den geänderten Wert der Variablen $ watch ausgibt, wird er nicht aufgerufen.

N.B. $ scope. $ parent.shared.previews ist ein Objekt

Was mache ich falsch? Und was ich erreicht habe, ist das ein guter Weg?

+0

Sie sollten $ parent.shared.previews nicht $ scope. $ Parent.shared.previews verwenden. an beiden Orten in Uhr und setinterval –

+0

Immer noch nicht funktioniert :( –

+0

können Sie Ihren vollständigen Code –

Antwort

1

Sie beobachten die Änderung eines Objekts, eine Tiefenüberwachung ist erforderlich. Zweitens, um die Variable des übergeordneten Bereichs zu sehen, schreiben Sie vielleicht besser $scope.$parent.$watch(...).

var deepWatch = true; 
$scope.$watch('$parent.shared.previews', function(newVal, oldVal) { 
    console.log("WORKING"); 
}, deepWatch); 
+0

Einfach perfekt. Vielen Dank. :) –

+0

Also habe ich hinzugefügt, was ist mein Zweck, dies zu verwenden. Aufrufen der Funktion populateTable, wenn die Variable geändert wird. Also ist die Verwendung einer $ Uhr ist eine gute Methode. –

Verwandte Themen