CSS ключевые анимации запускаются только один раз в приложении Angular
Обновлено: короче говоря, моя проблема в том, что DOM перестает обновляться всякий раз, когда я вызываю функцию, которая переключается из одного состояния в другое в приложении.
Что еще более интересно, это на самом деле происходит только во второй раз, когда эта функция вызывается из одного конкретного элемента.
Для конкретных деталей, я разрабатываю одностраничное приложение в AngularJS 1.2.28, и одно я удалил мой HTML-шаблон, display-widgets.html
содержать только 3 элемента следующим образом:
<p data-ng-click="widgetCtrl.onWidgetSelected(widgetCtrl.model.widgetData[0].widget)">widget 1</p>
<p data-ng-click="widgetCtrl.onWidgetSelected(widgetCtrl.model.widgetData[0].widget)">also widget 1</p>
<p data-ng-click="widgetCtrl.onWidgetSelected(widgetCtrl.model.widgetData[1].widget)">widget 2</p>
<p>{{widgetCtrl.interstitialMode}}</p>
Контроллер выглядит примерно так:
widgetShop.widgetCtrl.prototype.showWidgetHome = function (widget) {
this.state.go('widgetHome', {
widgetId: widget.widgetID
});
};
widgetShop.widgetCtrl.prototype.setupInterstitial = function () {
this.interstitialMode = true;
};
widgetShop.widgetCtrl.prototype.onWidgetSelected = function(widget) {
this.setupInterstitial();
this.showWidgetHome(widget);
};
Предполагаемая функциональность заключается в том, что после выбора виджета onWidgetSelected()
Вызывается передача выбранного виджета в качестве параметра, в котором переменная анимации обновляется (с намерением добавить класс с помощью ng-class в DOM) с помощью setupInterstitial() перед вызовом другой функции для переключения состояния. Некоторое взаимодействие будет происходить в этом состоянии (например, добавить виджет в корзину), и после его завершения состояние снова переключается на display-widgets
государство.
Я сократил здесь html до p-тегов для тестирования, но обнаружил, что если вы снова выберете тот же виджет (p-тег), элемент НЕ будет обновлен на странице, как раньше, и еще интереснее то, что нет Обновления DOM происходят вообще. Журналы консоли и предупреждения показывают, что angular обновил правильные переменные в контроллере, но изменение состояния, по-видимому, предотвращает любые обновления DOM. Выбор виджета 2 обновит DOM, как и ожидалось, но, как и в случае с первым виджетом, это произойдет не более одного раза. Выбор "также виджета 1" после выбора виджета 1 не будет обновлять DOM, как если бы он был выбран во второй раз, но выбор этого параметра перед виджетом 1 будет иметь тот же эффект, что и выбор виджета 1 первым.
Кто-нибудь знает, является ли это конкретной проблемой, когда браузеры не выполняют анимацию снова, потому что это одностраничное приложение? Или может быть проблема в другом месте моего кода? Я не смог найти что-либо через Google или переполнение стека с людьми, имеющими похожую проблему.
1 ответ
Похоже, когда вы добавили класс, он больше никогда не удаляется.
Как только класс добавлен, анимация начинается. Когда вы добавляете его снова, ничего не меняется, потому что у него уже был этот класс, и все стили уже применены.