在angularjs服务中收集变量的垃圾

时间:2016-07-27 04:34:03

标签: javascript angularjs garbage-collection angularjs-service

我是angularjs的新手。我设计了一个angularJS服务,如下图所示: -

enter image description here

全球服务用作控制器间通信的手段。也就是说,它包含父控制器和子控制器之间共享的数据。 Grand Parent控制器打开一个弹出对话框,其中包含parentController2,而homeController2又打开另一个具有childController3的弹出窗口。

现在,我想要的是,当关联的控制器被销毁时,存储在全局服务中的数据必须设置为null。这是因为根据我的知识,服务是angularjs中的单例。因此,我不希望服务在整个应用程序的生命周期中保存变量,即使它们不是必需的。

此外,我使用的是controllerAs语法,并且不想使用$ scope(我知道我可以在范围内的'$ destroy'事件中进行垃圾收集),以使我的东西与angularjs 2.0兼容。

有什么办法,当使用controllerAs语法时,我可以从控制器中垃圾收集服务中的变量(不需要)吗?

为新手问题道歉。提前谢谢。

1 个答案:

答案 0 :(得分:0)

使用ng-view是垃圾收集的另一个解决方案,因为它会在视图更改后立即销毁范围。它将与ngroute一起使用,但仍然提供更好的垃圾收集机制。 您可以查看ng-view代码

 function destroyLastScope() {
    if (lastScope) {
      lastScope.$destroy();
      lastScope = null;
    }
  }

在指令内部调用此函数会破坏先前范围的范围,即如果从父级转到子级,父范围将被销毁