У меня есть относительно большое приложение Angular, построенное поверх версии 1.2.25. В моем недавнем обновлении до 1.3.0 я обнаружил только одну серьезную проблему, которая, кажется, меняется, когда изменения класса html вносятся в DOM.
В этом примере jsfiddle обратите внимание на часы, которые получают размер элемента DOM, основанного на классе, измененном другой директивой: http://jsfiddle.net/travisgosselin/sx7jponj/1/ В этом примере используется Angular 1.2.25.
scope.$watch(function () {
return {
width: element.closest('.checkSize').width(),
height: element.closest('.checkSize').height()
};
}, function (size) {
scope.height = size.height;
}, true);
Другой jsfiddle, который точно такой же, но с Angular 1.3.0, вы заметите, что часы не запускают обновление, поскольку класс, кажется, применяется после того, как произошло $watch, не отображая обновления размера элемента. http://jsfiddle.net/travisgosselin/t80segou/1/
scope.$watch(function () {
return {
width: element.closest('.checkSize').width(),
height: element.closest('.checkSize').height()
};
}, function (size) {
scope.height = size.height;
}, true);
Идея заключается в том, чтобы позволить одной из моих директив изменять размер независимо от того, что происходит в другом компоненте.
В журнале изменений Angular единственное умеренно связанное изменение, которое я вижу, касается ngAnimate. См. критические изменения в версии 1.3.0-rc.5: API класса $animate CSS всегда будет откладывать изменения до конца следующего дайджеста. Это позволяет ngAnimate объединять изменения класса, которые происходят в течение короткого периода времени, в 1 или 2 записи DOM, а не во множество. Это предотвращает зависания в браузерах, таких как IE, и в целом это хорошо. Если вы обнаружите, что ваши классы не применяются немедленно, обязательно вызовите $digest().
Любая идея, как я могу лучше всего изменить этот сценарий, чтобы заставить часы на размер элемента dom срабатывать? На данный момент моей единственной альтернативой является использование серии событий, которые запускаются из разных мест и вызывают изменение размера (pub/sub).
changeSize()
. Добавьте вызов$timeout();
в конце. Да, я знаю, это грязно… - person Blackhole   schedule 18.11.2014