如何卸载angularjs模块

Eug*_*ets 18 javascript architecture module angularjs

我有一个由N个模块组成的应用程序.几乎所有这些模块都将按需加载.

有没有什么好的方法来组织动态加载和卸载模块的AngularJS应用程序?

为什么我们需要卸载模块

  • 模块数量(N)可以尽可能多,我不能保证任何最大数量.所以我尽量避免过度使用内存;
  • 我不认为将代码保留在我们不会使用的浏览器中是最佳做法(我不喜欢使用我的webapp选项卡将消耗所有可用内存并将挂起浏览器的想法);
  • 我认为谷歌也是这样.您可以整天使用Gmail,并且它仍然可以正常运行(Google I/O 2013 - 使用Gmail和DevTools浏览内存通道 http://www.youtube.com/watch?v=x9Jlu_h_Lyw).

关联

Ada*_*dam 5

从Angular 1.2.16和1.3.0 beta开始,该bootstrap()方法将DOM上的特定元素定义为模块集合的根范围.解除绑定没有相应的方法.该ng-app指令只是一个快捷方式bootstrap(),因此适用相同的限制.

与Artemis链接的angular-requirejs-seed项目没有回答你的问题.它使用该NG_DEFER_BOOTSTRAP!属性来挂起引导过程并动态定义在加载页面时要添加的模块.它没有卸载任何东西.

克服Angular固有无法卸载模块的最简单方法是销毁运行模块的DOM元素.不幸的是,通过摧毁元素,你也会失去你所拥有的任何标记.解决该问题的一个方法是将应用程序的标记放入HTML5 <template>元素并克隆其内容.这是我在JSBin编写一个示例,其中一个模糊命名的someGuyInASuit指令根据加载的模块加载Dr. Jekyll或Hyde先生的图片.

这种解决方法不适合由许多模块组成的应用程序,特别是如果您打算在用户与之交互时频繁地交换它们.首先,你的所有模型都将被销毁.此外,所有config()run()块将重新运行.您可能想要分叉Angular并添加自己的un-bootstrap方法,或者查看另一个框架,例如React,它有一个卸载内置组件的方法.


小智 1

也许您会发现这篇文章很有帮助。http://rarabaolaza.tumblr.com/post/56707155391/a-plugin-based-architecture-for-angularjs-apps

\n\n

它描述了使用 requirejs 和一些元数据创建基于插件的角度应用程序的近似方法,其中每个插件都是一个模块,也许您可​​以根据您的需求调整它或获得一些想法。但没有模块卸载我\xc2\xb4m害怕。

\n\n

如果您认为这可以帮助您,我\xc2\xb4m 目前正在修改它并(我相信)改进想法,所以请随时询问

\n\n

华泰

\n