较大规模的angular单页应用由于引用了大量的资源文件可能会导致在页面加载速度较慢,然而这些资源并非都需要在首页使用,这里我们可以使用了 RequireJsangular-async-loader 来实现资源和angular模块的异步加载,提高应用的加载速度和性能

依赖

使用bower管理项目依赖

Bower是一个客户端技术的软件包管理器,它可用于搜索、安装和卸载如JavaScript、HTML、CSS之类的网络资源。(bower需要依赖 nodejs)

安装项目依赖

1.angular
bower install angular
2.angular-ui-router
bower install angular-ui-router
3.requirejs 详细文档
bower install requirejs
4.angular-async-loader
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维护的插件

调用

配置需要使用requirejs调用的模块路径和依赖(bootstrap.js)

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(bootstrap.js)

//载入angular和路由
require(['angular','js/router'],function(angular){angular.element(document).ready(function(){angular.bootstrap(document,['app']); //angular加载完成后手动启动angular});
})

初始化angular主模块并配置异步加载模块(js/app.js)


define(function(require,exports,module){var angular = require('angular'); //引入angularvar asyncLoader = require('angular-async-loader'); //引入异步加载模块组件require('angular-ui-router')var app = angular.module('app', ['ui.router']); //定义app模块asyncLoader.configure(app); //给app模块配置异步加载module.exports = app; //作为模块导出
})

路由中要定义controller所在文件位置(js/router.js)

$stateProvider.state('login', {url:'/login',templateUrl: "template/login.html",controllerUrl: "js/login", //controller所在文件位置controller: "login" //controller名称
})

新建自定义模块(js/service.js)

define(function(require) {var angular = require('angular'); //引入angularangular.module('app.service', []) //创建模块.factory('asyncModule', function() {return '我的模块'})
})

controler中异步加载模块(js/login.js)

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);}]);})

AngularJS 项目搭建--基于RequireJs相关推荐

  1. [转]2020年排名前20的基于SpringBoot搭建的开源项目,帮你快速进行项目搭建!

    △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 287 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) SpringBoot ...

  2. 2020年排名前20的基于SpringBoot搭建的开源项目,帮你快速进行项目搭建!

    △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 287 篇原创分享 作者 l Hollis 来源 l Hollis(ID:hollischuang) SpringBoot ...

  3. 基于AI的计算机视觉识别在Java项目中的使用(三) —— 搭建基于Docker的深度学习训练环境

    深度学习在哪里? 我们已然生活在数字时代,一天24小时我们被数字包围.我们生活中的方方面面都在使用数字来表达.传递.存储.我们无时无刻不在接收数字信息,而又无时无刻不在生产数字信息. 在数字世界中,可 ...

  4. 基础环境搭建——基于Spark平台的协同过滤实时电影推荐系统项目系列博客(五)

    系列文章目录 初识推荐系统--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(一) 利用用户行为数据--基于Spark平台的协同过滤实时电影推荐系统项目系列博客(二) 项目主要效果展示--基 ...

  5. 【项目】基于SaaS的餐掌柜项目实战 阶段一 基于SaaS的餐掌柜项目实战 第1章 基础架构搭建 1 餐掌柜需求分析

    [项目]基于SaaS的餐掌柜项目实战 文章目录 [项目]基于SaaS的餐掌柜项目实战 阶段一 基于SaaS的餐掌柜项目实战 第1章 基础架构搭建 1 餐掌柜需求分析 1.1 餐饮行业分析 1.2 餐饮 ...

  6. 网站框架搭建——基于Django框架的天天生鲜电商网站项目系列博客(二)

    系列文章目录 需求分析--基于Django框架的天天生鲜电商网站项目系列博客(一) 网站框架搭建--基于Django框架的天天生鲜电商网站项目系列博客(二) 用户注册模块--基于Django框架的天天 ...

  7. 【完整项目搭建】基于vue-cli实现vue前端搭建考试系统——①创建vue-cli实现项目搭建

    1.打开vscode终端,cd进入指定目录[注意,是整个项目的文件夹,该文件夹未来将包含前端和后端的项目],并在指定目录下输入如下指令,检查是否按照node和npm,若已安装,则输出对应版本: ①检查 ...

  8. 基于Django框架的sysinfo项目搭建---系统信息监控(主机名,内核版本等)

    目录 主机信息监控 项目搭建 基础框架构建 首页系统信息展示完善 主机信息监控 项目搭建 详情见前篇博客 创建子应用host并且设置本地化 数据库表的创建和超级用户的创建 git管理项目(requir ...

  9. SpringBoot 搭建基于 minio 的高性能存储服务

    欢迎关注方志朋的博客,回复"666"获面试宝典 什么是minio 引用官网: MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储.它与Amazon S3 ...

最新文章

  1. linux下部署svn服务器
  2. python猜拳游戏三局两胜制_python石头剪刀布小游戏(三局两胜制)
  3. 大神,快来救救我,我搞不定啊
  4. 融合 MF 和 RNN 的电影推荐系统
  5. TP查询搜索函数的find select get value
  6. 10.4 route:显示或管理路由表
  7. 使用2.26内核的linux,介绍linux 2.6.9-42内核升级到linux 2.6.26-42的方法
  8. 一台电脑同时启动多个java_如何在一台同时登录多个微信?
  9. DOTNET零碎要点---1.vb.net利用Oracle.DataAccess.dll链接Oracle数据库
  10. 河北520分理科计算机专业,河北最幸运考生,520分“捡漏”考上中国人民公安大学,网友:铁饭碗...
  11. 初始化中断按键(2440)
  12. java canvas画矩形,HTML5 编程之Canvas
  13. SEP14MP2卸载重装
  14. php 关闭call stack,Thinkphp Call Stack,PHP调用栈Call Stack的获取
  15. 热敏电阻测温度c语言编程,NTC热敏电阻测温度 单片机C和汇编源程序
  16. python实现LU分解
  17. Windows7压缩文件到最小的方法
  18. 有道云笔记怎么保存html文件,有道云笔记如何保存网页有道笔记保存页面教程...
  19. 关于MSP430单片机程序烧写的介绍
  20. rest_framework--过滤器filters--搜索

热门文章

  1. boost::throw_exception的测试程序
  2. boost::gregorian模块实现查找给定月份最后一天的测试程序
  3. boost::core模块实现fn地址
  4. boost::callable_traits的has_member_qualifiers的测试程序
  5. VTK:网格之ColoredElevationMap
  6. VTK:Filtering之ImplicitBoolean
  7. C语言煎饼排序Pancake sort算法(附完整源码)
  8. C++赋值运算符和拷贝构造函数区别
  9. QT的QDataStream类的使用
  10. QT的QClipboard类的使用