2013-06-24 19 views
0

如何在模型更改時在ng-repeat中運行新元素的動畫?當模型發生變化時,新的元素會自動按角度創建,而在我看來,無法通知它(我沒有在文檔中發現任何事件)。 當我的自定義指令的鏈接函數被執行時(它在新元素被創建時被執行,但在被添加到DOM之前被執行),因爲我期望在將新元素添加到DOM之後執行定時器函數,所以我現在解決了這個問題,這要歸功於setTimeout(O, runAnim) (所以它呈現),但我不確定這是否會在每個瀏覽器和每種情況下工作,因爲角內部。有沒有更好的方法來獲得這種行爲?AngularJS - 模型更改時動畫新元素

EDI1:當元素被刪除,當模型改變 (如果我想淡出他們)

的index.html

<!DOCTYPE html> 
<html ng-app="MyApp"> 
<head> 
    <meta charset="utf-8" /> 
    <title>Angular js</title> 
    <script type="text/javascript" src="js/jquery-2.0.2.min.js"></script> 
    <script type="text/javascript" src="js/angular.min.js"></script> 
    <script type="text/javascript" src="js/app.js"></script> 
    <script type="text/javascript" src="js/Controllers.js"></script> 
</head> 
<body ng-controller="MyController"> 
     <ul> 
      <li ng-repeat="user in users" ng-bind="user" my-anim></li> 
     </ul> 
</body> 
</html> 

Controllers.js

這是不行的
function MyController ($scope) { 
    $scope.users = ['foo', 'bar']; 
} 

app.js

angular.module("MyApp", []) 

    .directive('myAnim', function() { 
     return function (scope, elem, attr) { 
      elem.hide(); 
      setTimeout(function() { 
       elem.fadeIn(); 
      }, 0); 
     } 
    }); 

回答

1

您可以使用CSS3動畫而不是jQuery。他們速度更快,可以在所有現代瀏覽器中工作。通過對不透明度或元素尺寸進行動畫處理,可以輕鬆實現簡單的淡入。它將在元素添加到DOM時開始。如果將animation-iteration-count設置爲1,它將在第一次迭代之後停止。

在網上有大量的CSS3動畫教程。也許你想從這裏開始:http://www.w3schools.com/css/css3_animations.asp

如果你更感興趣的話題,這是一個很好的文章:http://coding.smashingmagazine.com/2011/09/14/the-guide-to-css-animation-principles-and-examples/

淡出似乎更加困難,你的情況,因爲你不能動畫有一個對象已從DOM中刪除。無論是jQuery還是CSS3。我看到的唯一方法是分兩步更新陣列。首先標記將被移除的元素,例如用某個觸發動畫的類(或使用jQuery)。然後在第二步中實際刪除它們。