2014-10-08 8 views
5

का उपयोग करके एनीमेशन अनुक्रम मैं addClass/removeClass पर कॉल संयोजन करके एक एनीमेशन अनुक्रम बनाने की कोशिश कर रहा हूं।AngularJS addClass/removeClass

एनीमेशन विधि "हटाने क्लास" के अंत के बाद एनीमेशन को हटाने और एक नया शुरू करने के लिए कहा जाता है। लेकिन किसी कारण से, कुछ भी नहीं होता है। मैं यह पता लगाने की कोशिश कर रहा हूं कि यह क्यों काम नहीं करता है? कक्षा क्यों नहीं हटाई जाती है?

$animate.addClass(element, 'fadeInDown').then(function() { 
    $animate.removeClass(element, 'fadeInDown'); // why is it not working? 
    $animate.addClass(element, 'fadeOutDown'); 
}); 

पूर्ण संस्करण यहां पाया जा सकता

http://plnkr.co/edit/EFybfU4jcZoT3S7jCpM8?p=preview

उत्तर

4

आप इस हैक मैं अपने plunker में किए गए देख सकते हैं: http://plnkr.co/edit/iMMdPUrIz132PsCtB2Uq?p=preview

var myApp = angular.module('myApp', ['ngAnimate']); 

myApp.controller('Controller', function($scope) {}); 

myApp.directive('animated', ['$animate', '$window', function($animate, $window) { 
    return function(scope, element, attrs) { 
     scope.animate = function() { 
      $animate.addClass(element, 'fadeInDown').then(function() { 
       $animate.removeClass(element, 'fadeInDown'); // why is it not working? 

       setTimeout(function() { 
        scope.$apply(function() { 
         $animate.addClass(element, 'fadeOutDown'); 
        }); 
       }, 0); 

      }); 
     }; 
    }; 
}]); 

मैं करने के लिए एक शुद्ध सीएसएस समाधान प्रयास करने की अनुशंसा कोड स्पष्ट रखें। उदाहरण के लिए here देखें

+0

आप सिफारिश के लिए धन्यवाद, मुझे लगता है कि यह अच्छा अभ्यास – linksta

+0

यह एक ही समस्या के लिए मेरे लिए काम करता है, एक सवाल, क्यों आप $ एक टाइमर के अंदर कॉल लागू रखा है? यह निश्चित रूप से काम करता है, और यदि मैं टाइमर के बिना $ आवेदन करता हूं तो सभी एनिमेशन टूट जाते हैं और काम नहीं करते हैं, मुझे लगता है कि $ पाचन की कॉल पागल हो जाती है, लेकिन टाइमर के अंदर नहीं .... क्यों: -O – Kalamarico

+1

पीछे की ओर आपको चाहिए इसके बजाए [$ टाइमआउट] (https://docs.angularjs.org/api/ng/service/$timeout) का उपयोग करें। setTimeout कोणीय के बाहर चला जाता है (इसलिए परिवर्तन कोणीय द्वारा नहीं पता चला है) और लागू इसे फिर से वापस लाता है –

2

यहां रिचर्ड के समाधान का एक कम हैकटी संस्करण है (टाइमआउट के बजाय सेटक्लास का उपयोग करके)।

http://plnkr.co/edit/lIfPq2acHUu9Va6gou05?p=preview

var myApp = angular.module('myApp', ['ngAnimate']); 

myApp.controller('Controller', function ($scope) { 
}); 

myApp.directive('animated', ['$animate', '$window', function ($animate, $window) { 
    return function (scope, element, attrs) { 
    scope.animate = function() { 
     $animate.addClass(element, 'fadeInDown') 
     .then(function() { 
      $animate.setClass(element, 'fadeOutDown', 'fadeInDown'); 
      scope.$digest(); 
     }); 
    }; 
    }; 
}]); 
+0

आपका मतलब है कि आप "फिर" वादा का उपयोग कर रहे हैं, न कि "setTimeout।" "सेट क्लास $ कोणीय का एक कार्य है जिसे आप" फिर "वादा पूरा होने के बाद बुला रहे हैं। –