指令可以更新服务然后使用更新的版本吗?
在我的服务(cfg)中,我有一个变量和一个更新函数......
var test = "unfired";
function updateTest(){
console.log("LOG:","updateTest is firing");
test = "fired";
}
在我的指令的链接功能中,我有
scope.$watch(watcher, function(newVal, oldVal) {
console.log("Before:",cfg.test);
cfg.updateTest();
console.log("After:",cfg.test);
}); //scope.$watch
即使 updateTest 函数正在触发,控制台也会在前后记录相同的值。
现在,如果 cfg 是控制器而不是服务,我会做类似的事情
function updateTest(){
console.log("LOG:","updateTest is firing");
test = "fired";
cfg.$apply() //or cfg.$digest()
}
但显然那是行不通的。我还尝试将 cfg 注入控制器,并将 $apply() 注入链接函数......
console.log("Before:",cfg.test);
scope.$apply(function(){
cfg.updateTest()
});
console.log("After:",cfg.test);
它确实触发了 updateTest(),但它没有按照指令的理解更新 cfg 服务。
也许另一种说法是我想将服务“重新注入”到指令中。
如果您想知道我为什么要这样做,那是因为我有一堆 d3.js 动画作为共享相同比例的指令,并且我希望某些事件从一个指令触发比例域的变化给其他人。