У меня есть эта директива, также известная из других потоков. Теперь я столкнулся с исключением AngularJS:
Ошибка: $ rootScope: действие inprog уже начато. $ Digest уже выполняется.
Кто-нибудь знает, как я могу предотвратить это исключение? Я попробовал его с помощью триггера, но без успеха.
(function() {
'use strict';
angular
.module('myProject.common')
.directive('asScrollTop', asScrollTop);
asScrollTop.$inject = ['chatService'];
function asScrollTop(chatService) {
var directive = {
restrict: 'A',
scope: {
chatMessagesOfUser: '=',
currentUser: '=',
messagesPage: '='
},
link: link
};
return directive;
////////////
function link(scope, element, attr) {
console.log(element);
var trigger = false;
element.on('scroll', function() {
if(element[0].scrollTop <= 0 && trigger == false) {
trigger = true;
var page = scope.messagesPage + 1;
chatService.getChatMessagesOfUser(scope.currentUser.id, page).success(function(response) {
scope.chatMessagesOfUser = response;
scope.$apply();
trigger = false;
}).error(function(data) {
console.log('error in asScroll.directive.js#link');
});
}
});
}
}
})();
Это просто означает, что вам не нужно вызывать scope.$apply();
потому что дайджест уже происходит, поэтому все, что вы пытались достичь с ним, уже происходит. Просто удалите строку, и все должно работать нормально.