正如你懷疑的,「傳遞參數到addClass」是一個真正扭曲的黑客。
角度動畫是圍繞CSS類(因此,addClass/removeClass)構建的,因此,與CSS3轉換效果很好。這個系統是爲了使ng-repeat中的DOM元素自動設置CSS類來觸發添加,移動或刪除項目時的動畫。這與「自定義」動畫無關,就像我認爲你的意圖在這裏。
一種選擇是使用純CSS3過渡(這是不一樣的CSS動畫)和簡單地使用標準角數據經由納克式裝訂修改元件的尺寸/位置/顏色。 CSS轉換,如果在CSS中正確設置,將自動啓動。我創建了一個簡單的方法(computeCSS)表示,「項目的數據」,「轉換」爲NG-風格友好的結構。這是代碼(帶有可以平滑淡化顏色的紅利)。
http://plnkr.co/edit/oMOUiV5Sk6YusPpOqUQz?p=preview
加入600毫秒一個CSS3過渡:
<style>
.my-rectangles {
position:absolute;
-webkit-transition: width 0.6s, height 0.6s, left 0.6s, top 0.6s, background-color 0.6s;
transition: width 0.6s, height 0.6s, left 0.6s, top 0.6s, background-color 0.6s;
}
</style>
下面的代碼:
var myApp = angular.module("MyApp", ["ngAnimate"]);
myApp.controller('MainCtrl', function($scope) {
//nothing to declare
});
//general directive for the rectangles
myApp.directive('rectangles', function() {
return{
restrict: 'E',
template: '<div style="position:relative; width: 200px; height: 200px; background-color: #646464">' +
'<div ng-repeat="item in items" id="{{$index}}" class="my-rectangles" ng-style="computeCSS(item)"></div>' +
'</div>',
controller: function($scope) {
$scope.computeCSS = function(item) {
return {
width: item.width+"px",
left: item.left+"px",
top: item.top+"px",
height: item.height+"px",
'background-color':item.color
};
}
$scope.items = [
{width: 10, left: 10, top: 10, height: 10, color:'#4C8B71'},
{width: 10, left: 80, top: 10, height: 10, color:'#F3D698'},
{width: 10, left: 160, top: 10, height: 10, color:'#D25F45'}
];
$scope.randomize = function() {
$scope.items.forEach(function(item) {
item.width = Math.random() * (40 - 10) + 10;
item.height = item.width;
item.color = "#" + (Math.round(Math.random()*0xFFFFFF)).toString(16);
})
}
}
}
});
即使使用'element.attr.custom_bs_width =的newval [attrs.id] .WIDTH ;'工作。但仍然 - 這是要走的路嗎? – ilmgb