我对角度很陌生,我有一些像这样的CSS:
.heartbeat
{
transition:opacity 0.5s linear;
}
.heartbeat-active
{
opacity: 1;
}
范围内的属性会定期更新。每当属性更改时,如何使此转换运行一次?
我已经查看了 ngAnimation 和 addClass,但无法弄清楚如何以声明方式将它们拼接在一起。如果这甚至可能?
我对角度很陌生,我有一些像这样的CSS:
.heartbeat
{
transition:opacity 0.5s linear;
}
.heartbeat-active
{
opacity: 1;
}
范围内的属性会定期更新。每当属性更改时,如何使此转换运行一次?
我已经查看了 ngAnimation 和 addClass,但无法弄清楚如何以声明方式将它们拼接在一起。如果这甚至可能?
受 gnom1gnoms 答案和此线程https://groups.google.com/forum/#!msg/angular/xZptsb-NYc4/rKAxJ3dQhbMJ的启发,我最终做的是:
app.directive('highlightOnChange', function() {
return {
link: function($scope, element, attrs) {
attrs.$observe('highlightOnChange', function(val) {
var el = $(element);
el.removeClass('heartbeat');
_.defer(function() {
el.addClass('heartbeat')
});
});
}
};
});
也就是说,创建指令会观察属性。然后我可以像这样使用它:
<div highlight-on-change="{{value}}"></div>
并且不需要引用 $scope 中的元素。
只需观看您提到的属性并在触发手表时添加Class heartbeat-active
$scope.$watch('yourProperty', function(new, old) {
if(new != old)
$scope.yourElement.addClass(".heartbeat-active");
});
我假设您要闪烁的元素在范围内被引用。第二件事 - 你应该为心跳类添加一些不透明度的初始值。