如果您对AngularJS动态加载模块和依赖的方法分析和angular动态加载模块感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解AngularJS动态加载模块和依赖的方法分析的各种细节,并对a
如果您对AngularJS动态加载模块和依赖的方法分析和angular 动态加载模块感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解AngularJS动态加载模块和依赖的方法分析的各种细节,并对angular 动态加载模块进行深入的分析,此外还有关于Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖、Angular2动态加载模板、angularjs – Angular Bootstrap后加载模块、angularjs – ocLazyload没有加载模块的实用技巧。
本文目录一览:- AngularJS动态加载模块和依赖的方法分析(angular 动态加载模块)
- Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
- Angular2动态加载模板
- angularjs – Angular Bootstrap后加载模块
- angularjs – ocLazyload没有加载模块
AngularJS动态加载模块和依赖的方法分析(angular 动态加载模块)
本文实例讲述了AngularJS动态加载模块和依赖的方法。分享给大家供大家参考,具体如下:
前言
由于AngularJS是单页面应用框架,在正常的情况下,会在访问页面的时候将所有的CSS、JavaScript文件都加载进来。文件不多的时候,页面启动速度倒不会影响太多。但是一旦文件数太多或者加载的第三方库比较大的时候,就会影响页面启动速度。因此对于应用规模大、文件数比较多或者加载的第三方库比较大的时候,采用动态加载JS或者动态加载模块会极大提升页面的启动速度。本文将介绍如何利用ocLazyLoad实现动态加载。
准备
AngularJS动态加载依赖第三方库:ocLazyLoad。ocLazyLoad是一个第三方库,支持AngularJS动态加载module、service、directive以及静态文件。
安装ocLazyLoad
可通过npm或者bower进行安装
npm install oclazyload bower install oclazyload
将ocLazyLoad module 添加到你的应用中
angular.module(''myApp'',[''oc.lazyLoad'']);
配置 ocLazyLoad
你可以在 config函数中配置 $ocLazyLoadProvider,配置文件如下
.config([''$ocLazyLoadProvider'', function($ocLazyLoadProvider){ $ocLazyLoadProvider.config({ debug: true, events: true, modules: [ { name: ''TestModule'', files: [''test.js''] } ] }) }])
debug: 用来开启debug模式。布尔值,默认是false。当开启debug模式时,$ocLazyLoad会打印出所有的错误到console控制台上。
events:当你动态加载了module的时候,$ocLazyLoad会广播相应的事件。布尔值,默认为false。
modules:用于定义你需要动态加载的模块。定义每个模块的名字需要唯一。
modules必须要用数组的形式,其中files也必须以数组的形式存在,哪怕只需要加载一个文件
在路由当中加载module
.config([''$routeProvider'', function($routeProvider) { $routeProvider.otherwise(''/index''); $routeProvider.when(''/index'', { templateUrl: ''index.html'', controller: ''IndexController'', resolve: { // resolve 里的属性如果返回的是 promise对象,那么resolve将会在view加载之前执行 loadMyCtrl: [''$ocLazyLoad'', function($ocLazyLoad) { // 在这里可以延迟加载任何文件或者刚才预定义的modules return $ocLazyLoad.load(''TestModule''); //加载刚才定义的TestModule /*return $ocLazyLoad.load([ // 如果要加载多个module,需要写成数组的形式 ''TestModule'', ''MainModule'' ]);*/ }] } }) }])
resolve设置的属性可以被注入到Controller当中。如果resolve返回的是promise对象的话,那么它们将在控制器加载以及$routeChangeSuccess被触发之前执行。
$ocLazyLoad就是利用这个原理hack,进行动态加载。
resolve的值可以是:
* key,the value of key 是会被注入到Controller的依赖的名字;
* factory,即可以是一个service的名字,也可以是一个返回值,它是会被注入到控制器中的函数或可以被resolve的promise对象。
通过这样的配置,就可以实现了AngularJS动态加载模块和依赖。但是ocLazyLoad提供的功能更加丰富,不止动态加载模块和依赖,还能动态加载service,diretive等。更多的功能,可以访问[ocLazyLoad官网](https://oclazyload.readme.io)
希望本文所述对大家AngularJS程序设计有所帮助。
- AngularJs动态加载模块和依赖注入详解
- AngularJs 动态加载模块和依赖
- 详解Angular 4.x 动态创建组件
- angular 动态组件类型详解(四种组件类型)
- Angular.js实现动态加载组件详解
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
什么是ui-router
ui-router是AngularUI库最有用的组件之一(AngularUI库由AngularJS社区构建)。它是一个第三方路由框架,允许通过状态机制组织接口,而不是简单的URL路由。
什么是ocLoayLoad
ocLoayLoad是AngularJS的模块按需加载器。按需加载的对象
简单说就是哪个页面需要什么资源,在加载哪个页面的时候在加载,而不是把所有的资源放在模板里。
三个主要文件
<script src="angular/1.4.8/angular/angular.min.js"></script> <script src="angular/ui-router/release/angular-ui-router.min.js"></script> <script src="angular/oclazyload/src/ocLazyLoad.min.js"></script>
推荐
1:首先下载插件 可以百度搜索,这里我推荐在线测试的 https://www.bootcdn.cn/angular-ui-router/
2:github url :https://github.com/366065186/angularjs-oclazyload
3:Angularjs https://code.angularjs.org/
html文件(部分代码)简单说明
1:首先页面引入上面三个文件
2:在a标签中写入 ui-sref=''链接路径'' 标签
2:在页面定义一块区域用于显示链接内容 <ui-view></ui-view>
js代码:
首先在module中注入
''ui.router'', ''oc.lazyLoad''然后在通过config进行路由配置。
(function () { var app = angular.module("app", [''ui.router'', ''oc.lazyLoad'']) // 配置路由 app.config(function ($stateProvider) { $stateProvider // 个人中心主页 .state(''admin/index'', { url: ''/admin/index'', templateUrl: "/admin/index", // 加载页面需要的js resolve: load([''/static/js/transfer/adminlte/index.js'']) }) // 分类管理列表 .state(''class/index'', { url: ''/class/index'', templateUrl: "/class/index", resolve: load([ ''/static/js/transfer/adminlte/classification/index.js'' ]) }) // 轮播图列表 .state(''roll'', { url: ''/roll'', templateUrl: "/roll", resolve: load([ ''/static/js/transfer/adminlte/broadcat.js'' ]) }) // 验证码列表 .state(''code'', { url: ''/code'', templateUrl: "/code", resolve: load([ ''/static/js/transfer/adminlte/code.js'' ]) }) // 电影列表 .state(''movie'', { url: ''/movie'', templateUrl: "/movie", resolve: load([ ''/static/js/transfer/adminlte/movie/movie.js'' ]) }) // 电影编辑 .state(''movie/edit'', { url: ''/movie/edit'', templateUrl: "/movie/edit", resolve: load([ ''/static/js/transfer/adminlte/movie/movieedit.js'' ]) }) }); // 在加载该模块的时候调用$state.go(''admin/index'');,以激活admin/index状态。 app.run(function ($state) { $state.go(''admin/index''); }); /* * 通过$ocLazyLoad加载页面对应的所需的JS数据 * 通过$q异步加载JS文件数据其中使用的是promise【保护模式】 */ function load(srcs, callback) { return { deps: [ ''$ocLazyLoad'', ''$q'', function ($ocLazyLoad, $q) { var deferred = $q.defer(); var promise = false; srcs = angular.isArray(srcs) ? srcs : srcs.split(/\s+/); if (!promise) { promise = deferred.promise; } angular.forEach(srcs, function (src) { promise = promise.then(function () { angular.forEach([], function (module) { if (module.name === src) { src = module.module ? module.name : module.files; } }); return $ocLazyLoad.load(src); }); }); deferred.resolve(); return callback ? promise.then(function () { return callback(); }) : promise; } ] }; } })();
AngularJS路由设置对象参数规则:
属性 | 类型 | 描述 |
template | string | 在ng-view中插入简单的html内容 |
templateUrl | string | 在ng-view中插入html模版文件 |
controller | string,function / array | 在当前模版上执行的controller函数 |
controllerAs | string | 为controller指定别名 |
redirectTo | string,function | 重定向的地址 |
resolve | object | 指定当前controller所依赖的其他模块 |
效果图:
总结
以上所述是小编给大家介绍的Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
- angular之ng-template模板加载
- 浅谈Angular2 模块懒加载的方法
- 详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
- angularJS+requireJS实现controller及directive的按需加载示例
- 详解angular2采用自定义指令(Directive)方式加载jquery插件
- angular+ionic 的app上拉加载更新数据实现方法
- AngularJS中的按需加载ocLazyLoad示例
Angular2动态加载模板
谢谢
解决方法
如果模板不是很大,您可以使用* ngIf指令基于某个组件的属性进行有条件渲染.
解决此问题的另一种方法是在组件级别实现路由,然后在使用router.navigate([‘./ MySubcomponent’])收到数据后以编程方式路由到这些路由
angularjs – Angular Bootstrap后加载模块
angular.module('mainApp',[]);
后来我意识到用户需要通过secondaryApp提供的所有路由才能打开它们.所以现在我需要我的模块看起来像这样:
angular.module('mainApp',['secondaryApp']);
我成功地lazyLoading secondaryApp js文件,但我无法将其添加到mainApp.我试过将它添加到requires数组,即
var app = angular.module('mainApp'); app.requires[app.requires.length] = 'secondaryApp';
这会将模块名称添加到requires数组,但mainApp仍然无法访问secondaryApp中提供的路由/状态.
有没有人有什么建议?我已经被困在这一段了一段时间了.
谢谢!
解决方法
每次声明具有依赖关系的模块时,它都会覆盖先前的声明.
angularjs – ocLazyload没有加载模块
<!-- inject:js --> <script src="/packages/libs/jquery/dist/jquery.js"></script> <script src="/packages/libs/angular/angular.js"></script> <script src="/packages/libs/oclazyload/dist/ocLazyLoad.js"></script> <script src="/packages/libs/angular-ui-router/release/angular-ui-router.js"></script> <!-- endinject --> <script src="app/app.js" ></script> <script src="app/common/app.config.js" charset="utf-8"></script>
我的app.js –
(function () { angular.module('app',['ui.router','oc.lazyload']); angular.element(document).ready(function () { angular.bootstrap(document,["app"]); }); })();
但由于某种原因,它根本不加载oc.lazyload模块.可能是什么问题?我错过了什么吗?
Uncaught Error: [$injector:modulerr] Failed to instantiate module app due to: Error: [$injector:modulerr] Failed to instantiate module oc.lazyload due to: Error: [$injector:nomod] Module 'oc.lazyload' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
解决方法
'oc.lazyload'
至
'oc.lazyLoad' //'L' capitalized
关于AngularJS动态加载模块和依赖的方法分析和angular 动态加载模块的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖、Angular2动态加载模板、angularjs – Angular Bootstrap后加载模块、angularjs – ocLazyload没有加载模块的相关知识,请在本站寻找。
本文标签: