У меня есть массив сообщений в блоге на моем контроллере, и каждый раз, когда я обновляю массив, я хочу, чтобы представление изменилось соответствующим образом.
Это частичное HTML (Единственное, что отношение является то, что я использую нг-повтор):
<div ng-repeat="blog in blogCtrl.blogs">
<blog author="blog.author" title="blog.title" content="blog.content"></blog>
<button ng-click="blogCtrl.like(blog._id)" class="btn btn-info glyphicon glyphicon-thumbs-up">{{blog.likes}}</button>
<button ng-click="blogCtrl.remove()" class="btn btn-danger glyphicon glyphicon-remove"></button>
</div>
Это мой контроллер:
like(blogId){
this.BlogsDao.like(blogId).then(response => {
// replacing the old blog with the updated one
this.$scope.$apply(function(){
var itemIndex = _.findIndex(this.blogs, function(item){
return item._id === blogId;
});
this.blogs.splice(itemIndex, 1, response.data);
});
});
}
Теперь, когда я нажав на кнопку типа, которая запускает аналогичную функцию на моем контроллере.
выход консоли:
Error: [$rootScope:inprog] $digest already in progress
http://errors.angularjs.org/1.4.5/$rootScope/inprog?p0=%24digest
at REGEX_STRING_REGEXP (angular.js:68)
at beginPhase (angular.js:16235)
at Scope.parent.$get.Scope.$apply (angular.js:15976)
at blogs.ctrl.js:22
at processQueue (angular.js:14634)
at angular.js:14650
at Scope.parent.$get.Scope.$eval (angular.js:15878)
at Scope.parent.$get.Scope.$digest (angular.js:15689)
at Scope.parent.$get.Scope.$apply (angular.js:15986)
at done (angular.js:10511)
Я искал решения на другие должности, но хотя есть много сообщений по этому вопросу, никто не дал свою подсказку о том, что происходит здесь.
Что я делаю неправильно?
Почему бы вам нужно даже '$ $ apply' сфера в контроллере.? Должно ли AngularJS обновлять его автоматически? – DanEEStar
На самом деле вы правы. Пробовал это снова без $ apply и ng-repeat был соответствующим образом изменен. Благодаря! – Shikloshi