我正在使用一个服务,其中包含一个列表和操作该列表的方法。该服务在app.run()
中初始化,并在多个控制器之间共享。
NavCtrl
包含更新整个列表的方法,而FutureHomeCtrl
只包含对列表的引用,以便与ngRepeat(和其他指令)一起使用。
由于实际列表由服务包含并在FutureHomeCtrl
的{{1}}上通过引用分配,我原本认为对列表的任何更改都会被Angular自动检测和消化。但是,如果我使用$scope
手动重新设置对服务列表的引用,我只能刷新列表。
我的问题是我替换整个列表还是其他什么?我应该提一下,我也试过$broadcast
没有运气 - 而且,我认为这不应该是必要的吗?
$apply()
答案 0 :(得分:2)
我的问题是我替换整个列表还是其他什么?
是的,执行此代码时:
$scope.lights = MyHome.lights;
将引用复制到$scope.lights
。两者都引用内存中的同一对象,但引用($scope.lights
和MyHome.lights
)存储在单独的内存块中。因此,当您将MyHome.lights
替换为其他对象时,MyHome.lights
会引用新对象,但$scope.lights
仍引用原始内存块。
你可以尝试:
$scope.MyHome = MyHome;
并修改模板绑定以添加MyHome
前缀。