我有一个指令:
.directive('myDirective', function(){
'use strict';
return {
restrict: 'A'
, link: function(scope, element, attrs) {
var c = 0;
function stuff() {
console.log('==== compute ====');
return { 'c' : c };
}
scope.$on('Test', function(event) {
c += 1;
console.log('++++broadcast received++++ phase:', scope.$$phase);
});
scope.$watch(stuff(), function () {
console.log('-----Seen-----');
});
}
};
})
在我正在播放的另一个范围的控制器中的其他地方,上面的“开”是接收广播,我正在获取记录的条目。 但是,当发生这种情况时,Watch永远不会开火,“东西”不会被调用。 $$阶段也报告$ apply。
我有多少错误?
答案 0 :(得分:1)
它应该是scope.$watch(stuff, ...)
。没有括号。基于@marck的演示代码(谢谢):
link: function(scope, element, attrs) {
var c = 0;
function stuff() {
console.log('==== compute ====');
return {
'c': c
};
}
scope.$on('Test', function(event) {
c += 1;
console.log('c=',c);
});
scope.$watch(stuff, function(u,v) {
console.log(u,v);
}, true);
scope.cPlusOne = function() {
scope.$emit('Test');
};
}
答案 1 :(得分:-1)
$watch
监视范围变量的变化。使用$watch(stuff()...
,您可以调用stuff
并让角度观看返回的内容。这是{c:c}
。