2017-02-24 74 views
0

在我的控制器中,我想在變量值發生變化時收到通知。我的要求是當一個變量的值將改變一個函數將被調用。所以我使用$ watch。我的代碼如下。

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(「page」),['canvas']);

但問題是$ watch只在刷新我的頁面時才起作用。雖然setInterval正在打印變量$ watch的更改值未被調用。

N.B. $ scope。$ parent.shared.previews是一個對象

我在做什麼錯? 而我告訴的是,這是一個好方法嗎?

+0

您應該使用$ parent.shared.previews而不是$ scope。$ parent.shared.previews。在這兩個地方在手錶和設置的區域 –

+0

仍然不工作:( –

+0

你可以摧毀你的完整代碼 –

回答

1

您正在關注一個對象的屬性更改,需要深入觀察。其次,要觀察父範圍變量,也許你最好這樣寫$scope.$parent.$watch(...)

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

完美無缺。謝謝。 :) –

+0

所以我添加了什麼是我的目的使用這個。變量變更時調用populateTable函數。所以使用$ watch是個好方法。 –