Angular:更新列表;为什么这个$广播需要?

时间:2014-06-15 12:34:55

标签: angularjs

我正在使用一个服务,其中包含一个列表和操作该列表的方法。该服务在app.run()中初始化,并在多个控制器之间共享。

NavCtrl包含更新整个列表的方法,而FutureHomeCtrl只包含对列表的引用,以便与ngRepeat(和其他指令)一起使用。

由于实际列表由服务包含并在FutureHomeCtrl的{​​{1}}上通过引用分配,我原本认为对列表的任何更改都会被Angular自动检测和消化。但是,如果我使用$scope手动重新设置对服务列表的引用,我只能刷新列表。

我的问题是我替换整个列表还是其他什么?我应该提一下,我也试过$broadcast没有运气 - 而且,我认为这不应该是必要的吗?

$apply()

1 个答案:

答案 0 :(得分:2)

  

我的问题是我替换整个列表还是其他什么?

是的,执行此代码时:

 $scope.lights = MyHome.lights;

将引用复制到$scope.lights。两者都引用内存中的同一对象,但引用($scope.lightsMyHome.lights)存储在单独的内存块中。因此,当您将MyHome.lights替换为其他对象时,MyHome.lights会引用新对象,但$scope.lights 仍引用原始内存块

你可以尝试:

$scope.MyHome = MyHome;

并修改模板绑定以添加MyHome前缀。