AngularJS - 为什么服务中的对象触发$ digest循环并且赋值不要?

时间:2014-04-07 02:50:05

标签: javascript angularjs

我一直在摆弄AngularJS服务很长一段时间,我反对双向绑定问题。

也许一个例子可能会有所帮助: 我的address中有一个变量service,我想通过$ http服务调用填充它。但是一旦XHR完成,address var中的变化就不会被级联到控制器 - 以免我对它进行隐式监视。此外,当object notation用于值address.street时,绑定有效。

你能分享一下你对此的看法吗?这与编程的pass by reference概念有关吗?

顺便说一句,这是我为模拟我的困境而创建的fiddle

先谢谢你了!

1 个答案:

答案 0 :(得分:0)

是的,我相信你所看到的是混合原语和参考作业的结果。

在你提供的JSFiddle中,name被分配给一个原语(即字符串)和address分配给一个对象。然后,在您的控制器中,您尝试将这些服务变量(通过方法)分配给$scope下的变量。

由于name是原语,$scope.name最终只会复制字符串值,因此即使调用相关服务也不会更新。毕竟,原始是不可改变的。

另一方面,由于address是一个对象,并且无论您是否使用了对象概念,$scope.address都会复制引用,然后会通知更新值

这是一篇很好的阅读,详细解释了围绕你的难题的概念。

http://stsc3000.github.io/blog/2013/10/26/a-tale-of-frankenstein-and-binding-to-service-values-in-angular-dot-js/