动态加载模块角度
Dynamically load modules angular
我正在寻找一种方法,在应用程序生命周期中的任何时候只需一个指令即可加载模块(js、css和html)。
<my-module id="contacts"></my-module>
该指令的模板生成
<my-module id="contacts">
<link type="stylesheet" href="modules/contacts/contacts.css">
<script type="text/javascript" src="modules/contacts/contacts.js"></script>
<ng-include src="modules/contacts/contacts.html"></ng-include>
</my-module>
.js
文件创建一个新的角度模块
// modules/contacts/contacts.js
angular.module('my-contacts', [])
.controller(ContactsCtrl, function($scope) { ... });
".html"在这个模块中使用了一个控制器
// modules/contacts/contacts.html
<ul ng-controller="ContactsCtrl">
<li ng-repeat="contact in contacts">{{ contact.name }}</li>
</ul>
它不会工作,因为页面的模块<html ng-app="my-app">
不依赖于my-contacts
模块。因此,我希望每个模块都将自己作为my-app
依赖项注入。
我发现每个模块(angular.module
返回的对象)都包含一个requires
数组及其依赖项。我已经将my-contacts
注入到该数组中,这很有效:
// modules/contacts/contacts.js
angular.module('my-app').requires.push('my-contacts');
angular.module('my-contacts', [])
.controller(ContactsCtrl, function($scope) { ... });
但我在文件上找不到这处房产。它是标准的还是随时可以更改?有人知道吗?
更新
需要明确的是,这不是用单个组件加载单个模块,而是加载整个应用程序,想象一下它就像一个带有动态添加图标的启动器(比如MacOS的dockbar或Ubuntu的统一侧边栏),当点击其中一个图标时,它应该运行该模块。但我不知道在网页启动时,这个启动器应该能够启动哪些应用程序,我需要动态添加更多的应用程序。由于每个应用程序都有自己的指令和服务,所以我使用angular模块作为应用程序。
<body ng-app="my-app">
<ul>
<li ng-repeat="module in modules">
<button ng-click="selectedApp = module.id">{{ module.name }}</button>
</li>
</ul>
<my-module id="{{ selectedApp }}"></my-module>
</body>
我不确定你是否试图对代码进行如此多的抽象。
你应该能做什么:
- 制作模块
- 将指令与联系人列表一起放入模块中
- 将模块插入页面。并使用联系人列表
依赖项通常是模块定义的第二个参数。即:
angular.module('my-app', ['my-contacts']);
这就是你所指的吗?依赖关系以及如何正确地注入它们?
相关文章:
- 带有模块加载程序的Emscripten
- 使用Socket.io的异步模块加载(AMD)
- 角度模块加载错误
- NaCl中的模块加载进度事件,manifest_version=2,没有内联javascript
- 节点.js - 异步模块加载
- Angular2&SystemJS:在生成模块加载器时找不到模块
- 当作为 CommonJS 模块加载时,Angular 是否全局将自己分配给“window.angular”
- 杜兰达尔/要求:模块加载和执行
- 主干木偶:木偶.应用程序导致 Require.js 模块加载错误,“'错误:尚未为上下文加载模块名称'A
- 将库从节点模块加载到 nodeJS 中
- 道场模块加载一般
- 在JS模块加载的上下文中,什么是立即执行的工厂函数
- 如何将angularJS模块加载到应用程序中
- 角度模块加载失败
- require.js模块加载不正确
- 如何等待Angular模块加载
- SystemJS-ES6模块加载器-导入时层次结构过多
- 如何用oclazyload加载的外部模块加载Angular translate
- 运行从ecmascript 6模块加载的函数
- 了解 YUI 模块加载和附加