较大规模的angular单页应用因为引用了大量的资源文件可能会致使在页面加载速度较慢,然而这些资源并不是都须要在首页使用,这里咱们能够使用了 RequireJs
和 angular-async-loader
来实现资源和angular模块的异步加载,提升应用的加载速度和性能html
Bower是一个客户端技术的软件包管理器,它可用于搜索、安装和卸载如JavaScript、HTML、CSS之类的网络资源。(bower须要依赖 nodejs)node
bower install angular
bower install angular-ui-router
bower install requirejs
bower install https://github.com/subchen/angular-async-loader.git
└── project ├── js -- js目录 ├── app.js -- 初始化app ├── login.js -- 登录页控制器 ├── router.js -- 路由 ├── service.js -- 服务模块 └── productlist.json -- 测试数据 ├── template -- 模版html ├── index.html -- 入口页 ├── bootstrap.js -- 项目启动器 └── bower_components -- bower维护的插件
require.config({ baseUrl:'./', paths:{ 'angular':'bower_components/angular/angular', 'angular-ui-router': 'bower_components/angular-ui-router/release/angular-ui-router.min', 'service':'js/service.js' }, shim:{ 'angular':{exports:'angular'}, 'angular-ui-router': {deps: ['angular']}, 'service':{deps: ['angular']} }, waitSeconds: 0 //超时时间 设为0即持续等待 })
//载入angular和路由 require(['angular','js/router'],function(angular){ angular.element(document).ready(function(){ angular.bootstrap(document,['app']); //angular加载完成后手动启动angular }); })
define(function(require,exports,module){ var angular = require('angular'); //引入angular var asyncLoader = require('angular-async-loader'); //引入异步加载模块组件 require('angular-ui-router') var app = angular.module('app', ['ui.router']); //定义app模块 asyncLoader.configure(app); //给app模块配置异步加载 module.exports = app; //做为模块导出 })
$stateProvider.state('login', { url:'/login', templateUrl: "template/login.html", controllerUrl: "js/login", //controller所在文件位置 controller: "login" //controller名称 })
define(function(require) { var angular = require('angular'); //引入angular angular.module('app.service', []) //建立模块 .factory('asyncModule', function() { return '个人模块' }) })
define(function(require) { var app = require('js/app') //引入js/app.js下的app模块 require('service'); //加载服务模块的js文件 app.useModule('app.service'); //异步加载app.service模块 // 控制器中注入方法 app.controller('login',['$scope','asyncModule', function($scope,asyncModule){ alert(asyncModule); }]); })