第10篇:ui-router+ocLazyLoad实现控制器js文件的按需加载
2017-06-22 17:27
537 查看
在使用angular搭建项目的时候,如果单页面过多,就会配置过多的控制器,服务器等,就会导致项目启动时太多的js文件加载进来,存在其不合理之处,使用ocLoadLoad可以实现单页面控制器等js文件的懒加载,避免项目启动时过多的文件加载进来。
下面以一个demo为例分析如何使用lazyload和ui-router实现控制器的懒加载
1.项目目录结构:
tpl 三个视图文件
ctrl 三个视图对应的控制器
lib 引入的库
app.js 启动文件,包括模块,主控制器和路由
index.js 主页面
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/03/9eebd9f12c4db66d4c08cad6334ca35f)
2.引入库文件和配置ui-router导航
引入js文件:
3.项目入口文件app.js的配置
配置resolve属性时有不同的写法,下面引入三个控制器对应三种写法,在该demo中均可使用
ctrla.js:
5.效果展示
控制器js文件实现了按需加载
![](https://oscdn.geek-share.com/Uploads/Images/Content/202011/03/f9f160488fb98439ef7f5851165c4369)
demo地址:https://github.com/RidingACodeToStray/ocLazyLoad-uiRouter
下面以一个demo为例分析如何使用lazyload和ui-router实现控制器的懒加载
1.项目目录结构:
tpl 三个视图文件
ctrl 三个视图对应的控制器
lib 引入的库
app.js 启动文件,包括模块,主控制器和路由
index.js 主页面
2.引入库文件和配置ui-router导航
引入js文件:
<script src="lib/angular-1.3.0.js"></script> <script src="lib/angular-ui-router.js"></script> <script src="lib/ocLazyLoad.min.js"></script> <script src="app.js"></script>主视图含导航:
<body ng-app="myApp" ng-controller="myCtrl"> <h3>{{main}}</h3> <div> <span> <a ui-sref="a">第一页</a> </span> <span> <a ui-sref="b">第二页</a> </span> <span> <a ui-sref="c">第三页</a> </span> </div> <div ui-view="" style="width: 300px;height: 300px;background: #f2f2f2"> 主页 </div> </body>
3.项目入口文件app.js的配置
配置resolve属性时有不同的写法,下面引入三个控制器对应三种写法,在该demo中均可使用
//依赖注入oc.lazyLoad var app = angular.module('myApp',['ui.router','oc.lazyLoad']); //主页控制器 app.controller('myCtrl',function ($scope) { $scope.main = "ocLazyLoad+uiRouter实现angular单页面应用的控制器js文件按需加载"; }); //配置config app.config(function ($stateProvider, $locationProvider,$urlRouterProvider) { $urlRouterProvider.otherwise('/index'); $stateProvider //懒加载控制器的三种写法(为一个模块的前提下) .state('a',{ url : '/a', controller : 'ctrla',//不写会报错 templateUrl : './tpl/pagea.html', resolve : { loadMyCtrl : ['$ocLazyLoad',function ($ocLazyLoad) { return $ocLazyLoad.load({ name: 'myApp',//模块的名字,单个模块可以省略 files: ['ctrl/ctrla.js']//js文件地址 }) }] } }) .state('b',{ url : '/b', templateUrl : './tpl/pageb.html', controller : 'ctrlb', resolve : { loadMyCtrl : function ($ocLazyLoad) { return $ocLazyLoad.load({ name: 'myApp', files: ["ctrl/ctrlb.js"] }) } } }) .state('c',{ url : '/c', templateUrl : './tpl/pagec.html', controller : 'ctrlc', resolve : { loadMyCtrl : function ($ocLazyLoad) { return $ocLazyLoad.load("ctrl/ctrlc.js") } } }) });4.子控制器的配置
ctrla.js:
angular.module("myApp").controller('ctrla', function ($scope) { console.log(1); $scope.testA = 999; });另外两个ctrlb.js和ctrlc.js对应一样,需要注意的是若写成
app.controller('ctrla', function ($scope) { console.log(1); $scope.testA = 999; });则会报错
angular-1.3.0.js:10062 Error: [ng:areq] Argument 'ctrla' is not a function, got undefined
5.效果展示
控制器js文件实现了按需加载
demo地址:https://github.com/RidingACodeToStray/ocLazyLoad-uiRouter
相关文章推荐
- Angular-ui-router + oclazyload + requirejs实现资源随route懒加载
- AngularJS ocLazyLoad按需加载控制器/js文件的延迟加载(一)
- Angular-Ui-Router+ocLazyLoad动态加载脚本示例
- angular1x初始与架构演进(三)Ui-Router+OcLazyLoad加载模块
- angularjs ocLazyLoad分步加载js文件,angularjs ocLazyLoad按需加载js
- AngularJs、RequireJs、AngularAMD、ui-router搭建的JS文件动态加载
- angularjs1结合ui-router、ocLazyLoad分步按需加载js文件
- 【翻译】oc.lazyLoad with Angular ui router(按需加载文件)
- Angular-Ui-Router+ocLazyLoad动态加载脚本
- 异步加载js文件并执行js方法:实现异步处理网页的复杂效果(转)
- 异步加载js文件并执行js方法:实现异步处理网页的复杂效果
- ExtJS4.2下不重复加载ext-all.js等文件的实现方式
- Jquery.LazyLoad.js实现图片延迟加载功能
- lazyload.js实现淘宝商城图片加载效果
- JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
- Js判断CSS文件加载完毕的具体实现
- jquery插件实现图片延迟加载(lazyload.js)
- SPORE,一个很好的实现JS命名空间的管理,模块的定义,与自动加载依赖模块的脚本文件
- 实现jqGrid列表 css和js文件加载顺序详解
- 利用jQuery的deferred对象实现异步按顺序加载JS文件