通过引用将对象从服务绑定到控制器中的对象

时间:2016-02-26 07:45:44

标签: javascript angularjs object

我有一个问题,从Angular服务到对象的绑定对象到引用的Angular控制器。我正在我的服务中发出一些http请求,如下面的伪代码:

this.object = {};
http_request -> then this.object = response

在我的控制器中,我有以下内容:

this.controllerObject = MyService.object

但是,当响应来自服务器时,控制器中的值不会更新 - 仍然被定义为空对象。我在哪里做错了?

谢谢!

更新

好吧,我发现使用以下方法可以使它工作:

angular.copy(response,this.object)

但为什么?

2 个答案:

答案 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)看到的范围