我知道这些模板可以绑定到一个承诺或一个真正的价值,当这个值改变模板更新。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生命周期有关。还有其他关于这个的答案。 $ watch在开始时至少调用两次,因此您可能需要检查undefined和newval == oldval。 – jpmorin
感谢jpmorin,但这个问题更多的是承诺和非承诺之间的差异 - 这些情况返回到手表的值是不同的 –