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 相关文章推荐
动态修改DOM 里面的 id 属性的弊端分析
Sep 03 Javascript
图像替换新技术 状态域方法
Jan 28 Javascript
jQuery 自定义函数写法分享
Mar 30 Javascript
原生JS可拖动弹窗效果实例代码
Nov 09 Javascript
javascript学习笔记(八)正则表达式
Oct 08 Javascript
实例讲解jQuery中对事件的命名空间的运用
May 24 Javascript
浅谈移动端之js touch事件 手势滑动事件
Nov 07 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
Mar 30 Javascript
代码实例ajax实现点击加载更多数据图片
Oct 12 Javascript
Node.js系列之发起get/post请求(2)
Aug 30 Javascript
java和js实现的洗牌小程序
Sep 30 Javascript
浅谈Vue 自动化部署打包上线
Jun 14 Javascript
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
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
PHP实现获取中英文首字母
2015/06/19 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
jQuery基本过滤选择器用法示例
2016/09/09 Javascript
JavaScript九九乘法口诀表的简单实现
2016/10/04 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
vue实现后台管理权限系统及顶栏三级菜单显示功能
2019/06/19 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
基于element-ui对话框el-dialog初始化的校验问题解决
2020/09/11 Javascript
vue基于Echarts的拖拽数据可视化功能实现
2020/12/04 Vue.js
python操作ssh实现服务器日志下载的方法
2015/06/03 Python
通过数据库对Django进行删除字段和删除模型的操作
2015/07/21 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
python numpy元素的区间查找方法
2018/11/14 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
python实现画图工具
2020/08/27 Python
纯CSS实现设置半个字符的样式
2014/07/03 HTML / CSS
益模软件Java笔试题
2012/03/27 面试题
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
2015/08/25 面试题
产品质量承诺书范文
2014/03/27 职场文书
html5 录制mp3音频支持采样率和比特率设置
2021/07/15 Javascript
解析redis hash应用场景和常用命令
2021/08/04 Redis