Есть тестовая директива, которая рендерит список с помощью ng-repeat
filterApp.directive('test', function(){
return {
restrict: 'E',
//require: '^ngModel',
scope: {
items: '='
},
template: "<select><option ng-repeat='item in items'>{{item.name}}</option></select>",
link: function($scope, $element, $attrs) {
}
}
})
Шаблон
<test items="countryItems"></test>
Есть контроллер, который заполняет переменную
countryItems, делая запрос к REST сервису:
$scope.countryItems = Countries.query();
На выходе получаем пустой список.
AngularJs имеет встроенный механизм упрощающий работу с асинхронными задачами. В данном случае он заполняет $scope.countryItems, пустым массивом, а как только данные придут, заполняет массив ими.
Теоретически после заполнения данными массива, ангуляр должен отловить это изменение и разослать всем подписчикам, т.е. перерендерить список. Но этого не происходит.
При этом если в функции link написать:
$scope.$watch('items', function(v) {
console.log(v);
}, true);
То видно, что в саму директиву обновленный массив таки доходит, но представление не перерисовывается.
Что я делаю не так?