2016-07-28 61 views
0

有没有办法删除angular.module('SomeModule')动态?动态删除angular.module()

这是因为我需要从制表符容器中的页面加载和卸载模块。

这是基于Scott Moss的概念,其中每个组件都被视为Frontendmasters.com上的独立应用程序。

我可以

angular.module(name) 

分别返回一个对象获得的模块对象,但我错过清除引用此对象的一条明路。有没有人解决过这样的事情呢?

模板:http://plnkr.co/edit/8hK3lYjE7f06XtdHgNwL?p=preview

+0

您是否在谈论取消注册模块?你为什么要这样? –

+0

@EmileBergeron是的,这就是我的意思。这是因为我遵循将组件视为单独应用程序的范例。当用户浏览或删除视图(组件)时,我需要从DOM中卸载它。但用户有能力再次添加它。但添加它给了我在模块已经注册的地方的错误 这是一件愚蠢的事情,但有一个潜在的200多个组件的应用程序。我想知道如果我可以通过控制注册表来更好地管理内存 –

+1

我认为你很困惑路由和依赖注入(与模块)。您不应该从角度移除模块,因为它用于依赖性注入和负载排序。卸载DOM元素是通过控制器和路由完成的。 –

回答

2

这听起来像你可能会想优化的东西不存在。

首先,似乎没有任何记录的方式来删除模块。原因似乎是covered in the docs。在那里你会觉得这种说法(重点煤矿):

模块可以以任意顺序加载(或甚至并行),因为模块延迟执行

在这句话不指定延迟多久,但后来我们得到这个片段(再次,重点煤矿):

因为模块在加载时他们可以做什么以任何顺序加载到VM中,因此脚本加载程序可以利用此属性并且平行加载过程。

放在一起,听起来仿佛甚至多个模块的多,你不会注意到在您的网站负载,因为该模块将只在因此需要加载它卸下模块不是一个过程,应该永远需要完成。

+0

将组件加载到选项卡容器中,并且如果您导航以加载另一个组件,则不会删除第一个组件。这是事实。所以它不会在DOM中为你清理。由于复杂的UI设计,我碰巧有一个非常繁忙的标签容器。这意味着我需要懒惰的加载和懒卸载容器上的内容,并有能力到任何其他页面,并有以前的内容被卸载。我找到了一个解决方案,通过删除上面提到的“独立应用程序”模式以及$ destroying指令。感谢您的建议,虽然:) –

+1

这听起来更像是与你的标签组件相比,与Angular的问题。控制器应该在不再使用时销毁,除非您的选项卡组件继续“使用”每个控制器,那么这应该不是问题。尽管建立在自己的销毁过程中总是一个好主意。 –