当$ watch被召唤出来时?

时间:2018-03-21 11:21:57

标签: angularjs controller

在下面的代码中,$ watch stills使用旧的 newVal 而不是更新的。  我无法理解$ watch被叫出来的时间?如果我不想为特定功能调用$ watch,该怎么办?怎么做?

我是angularJs的新手!请帮忙!

$scope.$watch('vmHome.widgets', function(newVal) {
                if (!!newVal && angular.isArray(newVal) && (newVal.length > 0)) {
                    vmHome.widgetGridConfig.data.rows = [];
                    normalizeWidgetData(newVal);
                } else {
                    vmHome.widgetGridConfig.data.rows = [];
                }
            }, true);

1 个答案:

答案 0 :(得分:0)

您可以从here找到$watch的文档。关于何时调用$watch来提出问题:

  1. 摘要周期会触发$watch
  2. 您可以使用$scope.$apply()$scope.$digest()
  3. 手动触发它

    当范围值更改,由于ng-click等用户交互而触发事件时,将运行摘要周期

    试试此代码,希望它能解决您的问题:

     $scope.$watch('widgets', function(newVal) {
      if(!!newVal && angular.isArray(newVal) && (newVal.length > 0)) {
        vmHome.widgetGridConfig.data.rows = [];
        normalizeWidgetData(newVal);
      } else {
        vmHome.widgetGridConfig.data.rows = [];
      }
     }, true);