角度 - 检测变为相同的值

时间:2014-02-13 09:59:11

标签: angularjs angularjs-directive

我有一个控制器和一个指令。在指令中有来自控制器的数据数组。 当单击指令中的按钮时,我希望控制器更新数据。 因此,单击按钮,我显示一个忙碌的指示器,当控制器完成更新数据时,我想隐藏忙指示器。我的问题是有时候数据保持不变所以" watchCollection"功能未触发。

最重要的是,我正在寻找一种解决方案,让控制器告诉指令他已完成更新。

**我想到的另一个解决方案是为"更新"添加一个布尔值。该指令将其更改为true,控制器将在完成时将其更改为false。但问题是,在某些情况下,"更新"在摘要周期开始前检测到更改为true,将其更改回false。

该指令看起来像这样:

指令:

{
scope: {
        arrayData: "=",
        onChangeData: "&"
},

controller: function($scope){
     $scope.buttonClicked : function(){
         // show busy indicator
         $scope.onChangeData();
     }
}

link: function preLink(scope, element, attrs) {
    scope.$watchCollection('arrayData', function (value) {
          // hide busy indicator
   });
}
}

1 个答案:

答案 0 :(得分:0)

您可以通过返回onChangeData的承诺

来实现此目的
$scope.onChangeData=function() {
   var defer=$q.defer();
   //process data
   //resolve defer
   return defer.promise;
}

然后在指令控制器中执行

$scope.onChangeData().then(function() {
    //stop animation
});