Sebastianb Sebastianb - 6 months ago 43
Javascript Question

Angular: Fade in/out without including module NgAnimate

I'm building a small web app in Angular that includes a form with a "save changes" button.

I'd like to show a green tick signifying a correct update of the data, with a quick fade-in/fade-out animation.

I don't think it's worth adding a 20-ish Kb module just for that animation (I don't need to animate any other part of the app).

Is there an alternative way to perform a simple animation such as this without including NgAnimate, that preferably keeps in line with the "Angular way"?


Yes, there is a way - you can make use of CSS animations, $timeout and ng-class. Here is an example.

Basically you toggle the flag in parent controller

ctrl.showCheckmark = function() {
    ctrl.isShowingCheckmark = true;

    $timeout(function() {
        ctrl.isShowingCheckmark = false;
    }, 2000);

and watch the changes in checkmark component.

When the flag changes you set visibility and fade-in flags:

$ = function() {
    $ctrl.isShowing = true;

    $timeout(function() {
        $ctrl.fadeIn = true;
        $ctrl.fadeOut = false;

using $timeout to wait for previous $digest to finish and render ng-if="$ctrl.isShowing".

All that's left is writing some CSS animations and it is super easy.