基于requirejs实现angular的按需加载
来源:互联网 发布:软件工程项目明细 编辑:程序博客网 时间:2024/06/05 19:56
Requirejs配置
由于requirejs官方提供的功能是不能加载css样式功能的,许多第三方和官网也都提供了插件实现,不过我在这里要用的是一个很不错的样式模块加载器require-css,其官网地址为:
https://github.com/guybedford/require-css。
使用方法参考:http://segmentfault.com/a/1190000002390643
这里我不会详细介绍如何使用requirejs,不懂的地方请自行查阅资料
启动应用首先要先配置好requirejs的入口文件
require.config( { paths : { angular : 'vendor/angular/angular', 'angular-route': 'vendor/angular-ui-router/angular-ui-router' } , shim : { angular : { exports : 'angular' , init : function () { var _module = angular.module; angular.module = function () { var newModule = _module.apply( angular , arguments ); if ( arguments.length >= 2 ) { newModule.config( [ '$controllerProvider' , '$compileProvider' , '$filterProvider' , '$provide' , function ( $controllerProvider , $compileProvider , $filterProvider , $provide ) { newModule.controller = function () { $controllerProvider.register.apply( this , arguments ); return this; }; newModule.directive = function () { $compileProvider.directive.apply( this , arguments ); return this; }; newModule.filter = function () { $filterProvider.register.apply( this , arguments ); return this; }; newModule.factory = function () { $provide.factory.apply( this , arguments ); return this; }; newModule.service = function () { $provide.service.apply( this , arguments ); return this; }; newModule.provider = function () { $provide.provider.apply( this , arguments ); return this; }; newModule.value = function () { $provide.value.apply( this , arguments ); return this; }; newModule.constant = function () { $provide.constant.apply( this , arguments ); return this; }; newModule.decorator = function () { $provide.decorator.apply( this , arguments ); return this; }; } ] ); } return newModule; }; } } , "angular-route": { deps: ["angular"], exports: "angular-route" }, map : { '*' : { 'css' : 'vendor/require/css' } }} );require( [ 'angular' , // 第三方库只需要列在这里就可以了 'angular-route', // 别忘了依赖 app 模块 './app' , // 公用的服务和指令列在之后。] , function ( angular ) { angular.module( 'bootstrap' ,[ 'ui.router','app' ]);// 注意:app 模块只能放在最后一个,因为它依赖前面的第三方模块! angular.bootstrap( document , [ 'bootstrap' ] );} );
入口文件配置好后,需要在路由的app.js中添加一个辅助加载的函数
function loadDeps(deps) { return [ '$q', function($q) { var def = $q.defer(); require(deps, function() { def.resolve(); }); return def.promise; } ]; }
配置好之后就可以在路由里使用加载函数来加载依赖
使用方法如下:
define([ 'angular'], function(angular) { return angular.module('app', []) .config([ '$stateProvider', '$locationProvider' function($stateProvider, $locationProvider,) { // 设置路由 $stateProvider.state('login', { url: '/login', templateUrl: 'modules/login/login.html', controller: 'loginCtrl', resolve: { load: loadDeps([ 'modules/login/module', 'css!./styles/login.css' ]) } }) $stateProvider.state('otherwise', { url: '*path', template: '', controller: [ '$state', function($state) { $state.go('login'); } ] }); /** * 加载依赖的辅助函数 * @param deps * @returns {*[]} */ function loadDeps(deps) { return [ '$q', function($q) { var def = $q.defer(); require(deps, function() { def.resolve(); }); return def.promise; } ]; } } ]);});
到此即可简单实现angular路由跳转时按需加载需要的文件
0 0
- 基于requirejs实现angular的按需加载
- 基于angular路由的requireJs按需加载js
- Angular+Requirejs实现模块按需加载
- requirejs解决angular中按需加载的需求
- angularJS+requireJS实现controller及directive的按需加载
- angularJS+requireJS实现controller及directive的按需加载
- angularJS+requireJS实现controller及directive的按需加载
- angularJS+requireJS实现controller及directive的按需加载
- angular使用requirejs/ui-router/angularAMD实现动态加载模块
- angularjs+requirejs按需加载
- 使用requireJS按需加载
- 使用requireJS按需加载
- ionic+requirejs实现图片的懒加载
- RequireJs按需要加载angular模块和依赖,并且用r.js压缩打包js和css文件实现加载优化(图文)。
- r.js压缩angular项目,Angular+requirejs+rjs实现初始化http请求数的优化
- JavaScript模块化:使用requireJS按需加载
- RequireJS 按需加载js模块
- requirejs + angular + angular-route
- Zoho全球用户突破1500万-SaaS市场大有可为
- 高大上函数响应式编程框架ReactiveCocoa学习笔记1 简介
- AngularJS Module类的方法
- C#之中SqlCommand以及相关函数的使用
- 使用WebView显示GIF图
- 基于requirejs实现angular的按需加载
- 面向对象设计的基本原则
- 第二题
- How to point to 32 bit IBM DB2 ODBC driver on 64-bit Microsoft system?
- Visual C++ 2012 动态创建Ribbon 按钮若干问题
- autolayout Compact,Regular,Any 解析
- Session过期,如何跳出iframe框架页的问题
- MyEclipse10中配置开发Python所需要的PyDev 绝对靠谱 不忽悠!
- 实现将Android项目发布到GitHub上面