【发布时间】:2013-05-29 06:26:39
【问题描述】:
我有一个具有复杂布局的应用程序,用户可以在其中放置(拖放)小部件(通过从预定义的 100 多个小部件中选择),其中每个小部件都是显示一组数据的自定义实现(使用REST 调用)以特定方式。我已经阅读了大量的博客文章、stackoverflow 问题和官方 AngularJS 文档,但我无法弄清楚我应该如何设计我的应用程序来处理这些要求。查看演示应用程序,有一个模块(ng-app),当在 .js 文件中构建它时,依赖模块被声明为它的依赖项,但是我有一大堆小部件,不知何故不建议全部描述它们那里。我需要以下问题的建议:
- 我应该如何设计我的应用程序和小部件 - 我应该有一个单独的 AngularJS 模块还是每个小部件都应该是主模块的指令?
- 如果我将小部件设计为指令,有没有办法在指令中定义依赖关系。 IE。说我的指令在其实现中使用了 ng-calender?
- 如果我将每个小部件设计为单独的模块,有没有办法将小部件模块作为依赖项动态添加到主模块?
- 我应该如何设计控制器 - 每个小部件可能需要一个控制器?
- 如果视图中有多个相同类型的小部件,我应该如何分隔状态(范围)?
- 是否有使用 AngularJS 设计可重用小部件的最佳实践?
编辑
有用的参考资料:
- ocLazyLoad - great lazy loading lib for AngularJS
- Seed project - modules + lazy loading on route change (ES6, systemjs, ocLazyLoad)
- Lazy loading in AngularJS
- Dynamically Loading Controllers and Views with AngularJS and RequireJS
- Loading AngularJS Components With RequireJS After Application Bootstrap
- Demo project about lazy loading of AngularJS resources on GitHub
- Load On Demand project
- Inject module dynamically only if required
- Another lazy loading in Angular article
- Code Organization in Large AngularJS and JavaScript Applications
【问题讨论】:
-
我的第一个想法是将每个小部件创建为一对单独的 HTML/JS 文件,通过 ng-include 呈现。诀窍是只加载必要的控制器 JS 文件。
-
我可以动态添加包含 ng-include 的 html 吗?
-
我相信是的。在您的主控制器中,您将拥有一个定义哪些小部件处于活动状态的集合,在该集合的标记中,您将 ng-include 绑定到指向所述小部件的视图 HTML src 的某个属性。我很确定这行得通,但实际上我还没有做过这样的事情。
标签: javascript angularjs