【问题标题】:$watch in angularJS is not working as expectedangularJS 中的 $watch 没有按预期工作
【发布时间】:2017-07-14 22:14:24
【问题描述】:

在我的控制器中,我希望在变量值更改时收到通知。我的要求是当一个变量的值会改变一个函数将被调用。所以我使用$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 的更改值,但并未被调用。

注意$scope.$parent.shared.previews 是一个对象

我做错了什么? 我告诉要实现什么,这是一个好方法吗?

【问题讨论】:

  • 您应该使用 $parent.shared.previews 而不是 $scope.$parent.shared.previews。在 watch 和 setinterval 两个地方
  • 还是不行:(
  • 你能把你的完整代码发过来吗
  • $watch 正在监控范围内的值变化。所以一定要改变价值。
  • 添加了更多代码。如果您需要更多代码,我可以为您提供:)

标签: javascript angularjs watch ng-controller


【解决方案1】:

您正在观察对象的属性变化,需要深度观察。其次,要查看父范围变量,也许你最好这样写$scope.$parent.$watch(...)

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

【讨论】:

  • 完美。谢谢你。 :)
  • 所以我添加了我使用它的目的。变量更改时调用 populateTable 函数。使用 $watch 也是一种好方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
  • 2016-09-25
  • 2013-05-14
相关资源
最近更新 更多