我是angularjs的新手。我设计了一个angularJS服务,如下图所示: -
全球服务用作控制器间通信的手段。也就是说,它包含父控制器和子控制器之间共享的数据。 Grand Parent控制器打开一个弹出对话框,其中包含parentController2,而homeController2又打开另一个具有childController3的弹出窗口。
现在,我想要的是,当关联的控制器被销毁时,存储在全局服务中的数据必须设置为null。这是因为根据我的知识,服务是angularjs中的单例。因此,我不希望服务在整个应用程序的生命周期中保存变量,即使它们不是必需的。
此外,我使用的是controllerAs语法,并且不想使用$ scope(我知道我可以在范围内的'$ destroy'事件中进行垃圾收集),以使我的东西与angularjs 2.0兼容。
有什么办法,当使用controllerAs语法时,我可以从控制器中垃圾收集服务中的变量(不需要)吗?
为新手问题道歉。提前谢谢。
答案 0 :(得分:0)
使用ng-view是垃圾收集的另一个解决方案,因为它会在视图更改后立即销毁范围。它将与ngroute一起使用,但仍然提供更好的垃圾收集机制。 您可以查看ng-view代码
function destroyLastScope() {
if (lastScope) {
lastScope.$destroy();
lastScope = null;
}
}
在指令内部调用此函数会破坏先前范围的范围,即如果从父级转到子级,父范围将被销毁