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