2017-02-24 69 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是个好方法。 –