Доброго дня!
Уже не однократно сталкивался с тем, что меняем данные в контроллере или в директиве, а для применения изменений на странице приходится вызывать
$scope.$$phase || $scope.$digest();
либо применять изменения внутри
$scope.$apply(function(){//my code})
, в какие моменты отрабатывает $digest?
Пример кода:
(function() {
'use strict';
var HomeController = function($scope, productService) {
var _this = this;
_this.products = [];
productService.getProducts()
.then(function(data) {
_this.products = data;
});
setTimeout(function() {
_this.products = _this.products.splice(1, 2);
$scope.$$phase || $scope.$digest();
}, 3000);
};
HomeController.$inject = ['$scope', 'ProductService'];
angular.module('auction').controller('HomeController', HomeController);
}());
<ul class="list-unstyled" id="items-list">
<li class="col-md-4" ng-repeat="product in ctrl.products">
<div class="row">
<div class="product-description-holder col-xs-8">
<h2><a ng-href="#/product/{{ product.id }}">{{ product.title }}</a></h2>
<p>{{ product.description }}</p>
</div>
</div>
</li>
</ul>
При инициализации контроллера, всё хорошо, ng-repeat наклонирует продуктов, но после изменения переменной _products по таймеру, ожидаю увидеть 2 продукта, что происходит если запустить $digest руками
P.S. SetTimeout использован в качестве примера, мол данные изменяются из вне