我有一个控制器和一个指令。在指令中有来自控制器的数据数组。 当单击指令中的按钮时,我希望控制器更新数据。 因此,单击按钮,我显示一个忙碌的指示器,当控制器完成更新数据时,我想隐藏忙指示器。我的问题是有时候数据保持不变所以" 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
});
}
}
答案 0 :(得分:0)
您可以通过返回onChangeData
的承诺
$scope.onChangeData=function() {
var defer=$q.defer();
//process data
//resolve defer
return defer.promise;
}
然后在指令控制器中执行
$scope.onChangeData().then(function() {
//stop animation
});