Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度-检测更改为相同的值_Angularjs_Angularjs Directive - Fatal编程技术网

Angularjs 角度-检测更改为相同的值

Angularjs 角度-检测更改为相同的值,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我有一个控制器和一个指令。指令中有来自控制器的数据数组。 单击指令中的按钮时,我希望控制器更新数据。 因此,点击按钮,我会显示一个忙指示器,当控制器完成更新数据时,我想隐藏忙指示器。我的问题是,有时数据保持不变,因此不会触发“watchCollection”功能 总之,我正在寻找一种解决方案,允许控制器告诉指令他已经完成了更新 **我想到的另一个解决方案是为“更新”添加一个布尔值。指令将其更改为true,完成后控制器将其更改为false。但问题是,在某些情况下,在摘要循环开始之前,“更新”的值会

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

总之,我正在寻找一种解决方案,允许控制器告诉指令他已经完成了更新

**我想到的另一个解决方案是为“更新”添加一个布尔值。指令将其更改为true,完成后控制器将其更改为false。但问题是,在某些情况下,在摘要循环开始之前,“更新”的值会被更改回false,并检测到该值已更改为true

该指令如下所示:

指令:

{
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
   });
}
}

实现这一点的一种方法是返回
onChangeData
like的承诺

$scope.onChangeData=function() {
   var defer=$q.defer();
   //process data
   //resolve defer
   return defer.promise;
}
然后在您的指令控制器中执行以下操作:

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

请告诉我们onChangeData()是否再次重建arrayData或操作现有的arrayData。有时是相同的引用(相同的数组对象),有时是新对象。从何处检索数组对象?服务器还是-?你可以找到一种在某种回调中包含指示符的方法。我不知道你的意思是什么-数组有时来自服务器,在其他情况下不是。好吧,我基本上想问的是
$scope.buttonClicked
?当然,如果没有变化,那么就没有必要显示忙碌的指示器。但是,如果在确定数组对象是否实际更改时存在延迟,那么是什么导致了延迟?但是,我的指令的用户应该知道,他必须返回一个承诺。。。这是一个常见的解决方案吗?所以我决定使用类似于你建议的方法。我在“buttonClicked”中创建了延迟,并将延迟传递给控制器-类似于传递回调。