Ian*_*uir 10 angularjs angularjs-directive angularjs-scope
我有一个问题让手表在指令中工作.我在这里举了一个简单的例子.http://plnkr.co/edit/A7zbrsh8gJhdpM30ZH2P
我有一个服务和两个指令.一个指令更改服务中的属性,另一个指令在该属性上有一个监视.我希望手表能在房产改变后开火,但事实并非如此.
我在网站上看到过这样的其他几个问题,但是他们接受的解决方案在这里没有用.我考虑使用$ broadcast或尝试实现一个观察者,但似乎这应该有效,我不想在可能的情况下使事情复杂化.
tan*_*y_k 28
Mark Rajcok的回答不完整.即使使用angular.copy(),$ watch监听器也会被调用一次,而不会再被调用.
你需要$ watch一个函数:
$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
);
Run Code Online (Sandbox Code Playgroud)
这里有适用的插件:http://plnkr.co/edit/0mav32?p = preview
打开浏览器控制台,看看指令和demoService2都会收到有关demoService.currentObject更改的通知.
在这个例子中甚至不需要btw angular.copy().
代替
this.currentObject = newObject;
Run Code Online (Sandbox Code Playgroud)
使用
angular.copy(newObject, this.currentObject);
Run Code Online (Sandbox Code Playgroud)
使用原始代码,viewer指令正在观察原始对象{}.当currentObject设置为时newObject,$ watch仍在寻找原始对象的更改,而不是newObject.
angular.copy()修改原始对象,因此$ watch会看到该更改.
| 归档时间: |
|
| 查看次数: |
6154 次 |
| 最近记录: |