【发布时间】:2015-09-29 21:15:46
【问题描述】:
考虑以下场景。
有两个相互独立的指令,我想在这两个指令之间共享范围。由于它们不是嵌套的,我不能在指令中使用控制器来共享范围。所以我创建了一个服务并将服务注入到这两个指令中。
因此,当服务的值在一个指令中更改时,我需要在另一个指令中更新相同的值。我怎样才能做到这一点?我希望以有角度的方式正确完成此操作,没有反模式。
这是我迄今为止尝试过的
.directive('d1', ['cData', function() {
return {
link: function() {
// this watch is not working
scope.$watch( function() {
return cData.Value;
}, function(newValue, oldValue) {
alert(newValue);
})
}
}
})
.directive('d2', ['cData', function() {
return {
link: function() {
element.on('click', function() {
cData.Value = false
scope.$digest();
});
// A watch here is working, I have commented it out
/*scope.$watch( function() {
return cd.showStatus;
}, function(newValue, oldValue) {
alert(newValue)
})*/
}
}
}])
.service('cData', function() {
this.Value = false;
})
我在指令d2 的点击事件中更新服务的值,我需要在指令d1 中触发监视。可能这不起作用,因为两个指令的范围不同。我该如何实现这一点,非常感谢任何帮助。
更新
指令模板d1
template : '<div ng-class="{show:cData.Value==true}"></div>'
更新{show:cData.Value==true}
我必须在指令d1的事件监听器中再次调用scope.$apply()
希望这是正确的方法。
【问题讨论】:
标签: javascript angularjs angularjs-directive angularjs-scope