angular.js + require.js构建模块化单页面应用的方法步骤


Posted in Javascript onJuly 19, 2017

前言

本文主要给大家介绍的是关于利用angular.js + require.js构建模块化单页面应用的方法,分享出来供大家参考学习,需要的朋友们下面来一起看看详细的介绍吧。

AngularJS描述:

angularjs是可以用来构建WEB应用的,WEB应用中的一种端对端的完整解决方案。通过开发者呈现一个更高层次的抽象来简化应用的开发。最适合的就是用它来构建一个CRUD应用,它提供了非常方便的且统一高效的解决方案,其数据绑定、基本模版标识符、表单验证、路由、深度链接、组件重用、依赖注入、以及HTML标记等,最受欢迎的莫过于它的双向数据绑定。

requireJS描述:

requireJS是来解决传统的页面加载script标记操作,通过其初始化配置实现按需、并行、延时的载入js库,声明不同js文件之间的依赖关系,它是遵循前端AMD规范(异步模块加载)。js代码可以以模块化的方式进行组织(模块化编程)。模块化的意义就是通过代码逻辑表明模块之间的依赖关系和执行顺序,按照模块逻辑来分解代码,起到配合mvc框架架构项目的作用。

整合:

使用requireJS模块化定义模块质检的依赖关系,打包不需要文件挨个对照,很方便。将script脚本从模版页面中抽离出来,通过js当前模块加载需要依赖的js模块。按需加载。路由更加方便。

实践—?目录结构

这里文件目录可以根据项目需求自由调整

angular.js + require.js构建模块化单页面应用的方法步骤

实践—?index.html

和正常的html写法一样,这里要注意引入js时只要引用main和require.js,由require.js去动态加载所需要的js

<div class="main">
 <div class="header">
  <div class="right-bar">
   <span class="welcome">当前用户:<b>...</b> <button class="btn btn-info btn-xs"><i class="fa fa-sign-out"></i> 注销</button></span>
  </div>
 </div>
 <div class="mainContent has-shadow">
  <div ng-view></div>
 </div>
</div>
<script data-main="js/main" src="js/libs/require.js"></script>//只要引用main和require.js

实践—?入口文件main.js

实例化require.js并配置各种js的路径以及依赖关系,初始化整个项目

/**
 * 入口文件
 */
require.config({
 baseUrl: "js/",
 paths: {
  "jquery": "libs/jquery203",
  "angular" : "libs/angular.min",
  "angular-route" : "libs/angular-route.min",
  "angular-sanitize" : "libs/angular-sanitize.min",


  "app" : "controllers/app",
  "loadingInterceptor" : "controllers/loadingInterceptor",
  "run_stateCtrl" : "controllers/run_stateCtrl",

  "route" : "routes/appRoute"
 },
 shim: {
  'angular': {
   exports: 'angular'
  },
  'angular-route':{
   deps: ["angular"],
   exports: 'angular-route'
  },
  'angular-sanitize':{
   deps: ["angular"],
   exports: 'angular-sanitize'
  }
 }
});
require(['jquery','angular','angular-route','angular-sanitize','app','loadingInterceptor','route','run_stateCtrl'],function ($,angular){

  $(function () {

   angular.bootstrap(document,["myApp"]);//初始化整app

  })

});

实践—?建立angular.module 即app.js

建立angular.module,所有的操作都是在angular.module的基础上进行的

/**
 * 建立angular.module
 */
define(['angular'], function (angular) {
 var app = angular.module('myApp', ['ngRoute','ngSanitize','ajaxLoading']);//引入需要以来的模块
 return app;
});

实践—?建立路由

不同的模块被加载进主视图,并绑定控制器

/**
 * 路由
 */
define(['app'], function(app){
 return app.config(['$routeProvider',function($routeProvider) {
   $routeProvider
    .when('/', {
    templateUrl: 'js/views/run_state.html',
    controller: 'run_stateCtrl'
    })
    .when('/xq', {
    templateUrl: 'js/views/xq.html',
    controller: 'xqCtrl'
    })
    .otherwise({ redirectTo: '/' });
 }])
});

实践—?模块控制器

被路由绑定的模块控制器,控制着当前模块的业务流程

define(['app'], function(app){  
 return app.controller('run_stateCtrl', ['$scope','$rootScope','$http', function ($scope,$rootScope,$http) {

   $rootScope.headTitle = $rootScope.title = "hello,angular!";
   $rootScope.appName = $rootScope.span = "angular侧导航";
   $scope.getMore = function(){
    angular.element('.state').text('正在运行')
   };
   $http.get('./json/215145.json').
    success(function(data) {
    $scope.branchs = data.branchs;    
    });
  }])
});

总结

整体的模块搭建完之后,具体的业务流程,根据angularjs的API来具体实现功能。

好了,以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jQuery中调用WebService方法小结
Mar 28 Javascript
javascript常用的方法整理
Aug 20 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
Sep 09 Javascript
解决JS无法调用Controller问题的方法
Dec 31 Javascript
基于javascript实现数字英文验证码
Jan 25 Javascript
jQuery窗口拖动功能的实现代码
Feb 04 Javascript
jquery事件与绑定事件
Mar 16 Javascript
浅谈js基础数据类型和引用类型,深浅拷贝问题,以及内存分配问题
Sep 02 Javascript
小程序ios音频播放没声音问题的解决
Jul 11 Javascript
angularjs1.5 组件内用函数向外传值的实例
Sep 30 Javascript
跨域请求两种方法 jsonp和cors的实现
Nov 11 Javascript
jQuery实现移动端图片上传预览组件的方法分析
May 01 jQuery
Vue学习笔记进阶篇之多元素及多组件过渡
Jul 19 #Javascript
vue中的非父子间的通讯问题简单的实例代码
Jul 19 #Javascript
Vue之Watcher源码解析(2)
Jul 19 #Javascript
Angular.js项目中使用gulp实现自动化构建以及压缩打包详解
Jul 19 #Javascript
JS+canvas实现的五子棋游戏【人机大战版】
Jul 19 #Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
Jul 19 #Javascript
Vue学习笔记进阶篇之单元素过度
Jul 19 #Javascript
You might like
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
js 多浏览器分别判断代码
2010/04/01 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
jquery.validate提示错误信息位置方法
2016/01/22 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
预防网页挂马的方法总结
2016/11/03 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
使用canvas进行图像编辑的实例
2017/08/29 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
[46:59]完美世界DOTA2联赛PWL S2 GXR vs Ink 第二场 11.19
2020/11/20 DOTA
在Python的Django框架中调用方法和处理无效变量
2015/07/15 Python
Python读大数据txt
2016/03/28 Python
浅谈Python 的枚举 Enum
2017/06/12 Python
Python简单读取json文件功能示例
2017/11/30 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
2020/01/06 Python
基于python 取余问题(%)详解
2020/06/03 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
皇家阿尔伯特英国官方商店:Royal Albert骨瓷
2019/03/25 全球购物
关心下一代工作先进事迹
2014/08/15 职场文书
党员三严三实心得体会
2014/10/13 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
详解Vue的sync修饰符
2021/05/15 Vue.js
Python中json.dumps()函数的使用解析
2021/05/17 Python
Mysql中存储引擎的区别及比较
2021/06/04 MySQL