我遇到了让手表在指令中工作的问题。我在这里举了一个简单的例子。 http://plnkr.co/edit/A7zbrsh8gJhdpM30ZH2P
我有一个服务和两个指令。一个指令更改服务中的属性,另一个指令在该属性上有一个监视。我希望手表能在房产改变后开火,但事实并非如此。
我在网站上看到过这样的其他几个问题,但是他们接受的解决方案在这里没有用。我考虑使用$ broadcast或尝试实现一个观察者,但似乎这应该有用,如果可能的话我不想让事情复杂化。
答案 0 :(得分:28)
你需要$观看一个功能:
$scope.$watch(
// This is the important part
function() {
return demoService.currentObject;
},
function(newValue, oldValue) {
console.log('demoService.currentObject has been changed');
// Do whatever you want with demoService.currenctObject
},
true
);
这里有效的plunker:http://plnkr.co/edit/0mav32?p=preview
打开浏览器控制台,看看指令和demoService2都会收到有关demoService.currentObject更改的通知。
在这个例子中甚至不需要btw angular.copy()。
答案 1 :(得分:5)
而不是
this.currentObject = newObject;
使用
angular.copy(newObject, this.currentObject);
使用原始代码,viewer
指令正在观察原始对象{}
。当currentObject
设置为newObject
时,$ watch仍在寻找原始对象的更改,而不是newObject
。
angular.copy()修改原始对象,因此$ watch会看到该更改。