我试图使用一个指令来监视位于ng-repeat循环内的自定义属性中的更改。 ng-repeat中使用的数组每5秒更新一次。当项目从前一个值改变时,我想为div创建动画。
我使用$watch
来跟踪旧的和新的价值,但它们总是相同的。我知道$watch
函数永远不会检测范围内的变化,因为一旦数据加载,ng-repeat就会再次触发。
目标是如果值更改,则为div的背景颜色设置动画。
但我该如何避免这种情况?
指令:
.directive('animateOnChange', function($timeout) {
return function(scope, element, attr) {
scope.$watch(attr.animateOnChange, function(nv,ov) {
if (nv!=ov) {
if(attr.change > 0){
element.addClass('changed-positive');
$timeout(function() {
element.removeClass('changed-positive');
}, 1000);
}else if (attr.change < 0){
element.addClass('changed-negative');
$timeout(function() {
element.removeClass('changed-negative');
}, 1000);
}
}
});
};
});
HTML:
<div class="row" ng-repeat="item in data">
<div class="box" animate-on-change="item.activeprice[0]" change="{{item.change[0]}}">
<h2>{{item.desc[0]}}</h2>
<p>Time: {{item.asktime[0]}}</p>
</div>
</div>
$scope.data
获取调用/经由http请求更新。
有什么建议吗?
感谢。我将'$ watch'函数移到了父范围,并创建了一些循环来查找和动画变化的div。 – TietjeDK