Я знаю, что шаблоны могут связываться с обещанием или реальным значением, и когда это значение изменяет шаблон обновляется.Angularjs - смотреть обещание - получать неопределенные
Я хочу сделать что-то подобное в директиве, где я смотрю изменения в обещании и перезагружаю данные в директиве, когда это обещание обновляется.
Однако, когда я смотрю обещание, оно, похоже, регистрирует изменение, но затем сразу устанавливается на «undefined».
См http://plnkr.co/edit/eOjkuvyrQvKhkAbVLGVG?p=preview
Как вы можете видеть шаблон обновляется без проблем, но если вы проверяете консоль, смотреть «isNotAPromise» работает, как ожидалось, но часы «isAPromise» срабатывает в два раза, и с «неопределенный».
Любые подсказки?
Вот код, чтобы сделать так счастлив:
app.controller('MainCtrl', function($scope, $q) {
var c;
c = 1;
setInterval(function() {
c = c + 1;
console.log('---------------');
console.log(['c changed to ', c]);
return $scope.$apply(function() {
$scope.isNotAPromise = c;
return $scope.isAPromise = $q.when(c);
});
}, 1000);
$scope.$watch('isAPromise', function(newVal, oldVal) {
return console.log(['isAPromise changed', oldVal, newVal]);
});
return $scope.$watch('isNotAPromise', function(newVal, oldVal) {
return console.log(['isNotAPromise changed', oldVal, newVal]);
});
});
Спасибо, Рой
Это связано с жизненным циклом AngularJS. Есть другие ответы SO об этом. $ Watch вызывается как минимум дважды в начале, поэтому у вас может быть чек для неопределенного и для newval == oldval. – jpmorin
Спасибо jpmorin, но этот вопрос больше связан с различиями между обещаниями и не обещаниями - значения, возвращаемые на часы для этих сценариев, различны –