我有一个问题,从Angular服务到对象的绑定对象到引用的Angular控制器。我正在我的服务中发出一些http请求,如下面的伪代码:
this.object = {};
http_request -> then this.object = response
在我的控制器中,我有以下内容:
this.controllerObject = MyService.object
但是,当响应来自服务器时,控制器中的值不会更新 - 仍然被定义为空对象。我在哪里做错了?
谢谢!
更新
好吧,我发现使用以下方法可以使它工作:
angular.copy(response,this.object)
但为什么?
答案 0 :(得分:1)
this.object = {};
http_request -> then this.object = response
当你这样做时,你会说
第一行:我将this.object
属性分配给空对象(对位置A的引用)
第二行:我将this.object
属性分配给response
对象(对位置B的引用)
然后在您的控制器中
this.controllerObject = MyService.object
当你初始化这样的控制器时,你说我会将this.controllerObject
分配给MyService.object
。那时,MyService.object
指向位置A(因为服务中的第一行已经执行了)。
然后你打电话给你的服务(我想你以后会在你的流程中调用以下这行)
http_request -> then this.object = response
此行this.object
将指向位置B后,它不会更改位置A中的数据,因此位置仍为空对象 =>您的controllerObject属性也不会更改。
关于您的更新,您可以查看angular.copy的文档。它说:
如果提供了目标,则会删除其所有元素(对于数组)或属性(对象),然后将源中的所有元素/属性复制到该目标。
这意味着angular.copy不会创建新引用,而是使用新值更新目标位置。这就是您更新工作的原因。
答案 1 :(得分:0)
我认为因为你绑定到响应,它是http promise的回调函数中的内部变量。 (this.object和this.controllerObject指的是响应消失了它的功能范围)
在第二种情况下,您复制到两者(this.object和this.controllerObject)看到的范围