Что такое ng-hide-add, ng-hide-active

Я оживляю div. Он имеет следующее определение:

<div ng-show="showTranslations" ng-swipe-right="showTranslationsBlock=false">...</div>

У меня определено следующее css:

div.ng-hide {
    transition: 0.5s linear opacity;
    opacity: 0;
}

div.ng-hide-add, 
div.ng-hide-remove {
    /* this needs to be here to make it visible during the animation
       since the .ng-hide class is already on the element rendering
       it as hidden. */
    display:block!important;
}

Это взято из данного руководства. Работает анимация. Но:

  • Зачем нужны эти классы .ng-hide-add и .ng-hide-remove?
  • Почему я не вижу их добавленных в div-классы?
  • Почему существуют классы ng-hide-add-active и ng-hide-remove-active?
  • Почему нет перехода, когда div становится видимым, хотя я добавил следующее правило css:

    div.ng-hide-remove { opacity: 1; }

UPDATE

  • Как видно из таблицы, представленной в учебном руководстве Google, эти классы добавляются в триггер animation frame (this performs a reflow). Правильно ли я понимаю? Почему там упоминается animation frame?
  • Я пытался увеличить переходный период, но он не добавлял классы. Я не видел добавленные классы ng-hide-add-active и ng-hide-remove-active.
  • Как я понимаю из таблицы, это классы, которые вызывают переход?

Update1
Я изучил исходный код Angular и нашел следующее для директивы ng-hide:

var ngHideDirective = ['$animate', function($animate) {
  return function(scope, element, attr) {
    scope.$watch(attr.ngHide, function ngHideWatchAction(value){
      $animate[toBoolean(value) ? 'addClass' : 'removeClass'](element, 'ng-hide');
    });
  };
}];

Как я понимаю, класс ng-hide добавляется через службу анимации. Но что произойдет, если я не использую анимацию, а услуга $animate недоступна? Как Angular будет обрабатывать эту ситуацию с учетом приведенного выше кода и как он собирается добавить класс ng-hide? Или это $animate.addClass() просто добавляет обратный вызов к событию addClass?

enter image description here

Ответ 1

Поместите свой переход CSS на ng-hide-remove, ng-hide-remove-active:

div.ng-hide-remove {
    transition: 0.5s linear opacity;
    opacity: 0;
}


div.ng-hide-remove-active {
    opacity: 1;
}

Аналогично, для ng-hide-add и ng-hide-add-active:

div.ng-hide-add {
    transition: 0.5s linear opacity;
    opacity: 1;
}


div.ng-hide-add-active {
    opacity: 0;
}