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 上下滚动广告
Jun 17 Javascript
javascript跨域刷新实现代码
Jan 01 Javascript
JavaScript 实现类的多种方法实例
May 01 Javascript
jquery实现的仿天猫侧导航tab切换效果
Aug 24 Javascript
js正则表达式replace替换变量方法
May 21 Javascript
JS简单实现浮动窗口效果示例
Sep 07 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
Nov 18 Javascript
javascript+html5+css3自定义提示窗口
Jun 21 Javascript
jquery一键控制checkbox全选、反选或全不选
Oct 16 jQuery
JavaScript使用ul中li标签实现删除效果
Apr 15 Javascript
Vue中UI组件库之Vuex与虚拟服务器初识
May 07 Javascript
浅谈vue.use()方法从源码到使用
May 12 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
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
2014/02/23 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
node.js学习之断言assert的使用示例
2017/09/28 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
详解vue axios二次封装
2018/07/22 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
在vue中使用G2图表的示例代码
2019/03/19 Javascript
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
[01:02:17]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG
2014/05/26 DOTA
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
使用C语言来扩展Python程序和Zope服务器的教程
2015/04/14 Python
Mac 上切换Python多版本
2017/06/17 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
Python下应用opencv 实现人脸检测功能
2019/10/24 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
Python实现AI换脸功能
2020/04/10 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
环境工程大学生个人的自我评价
2013/10/08 职场文书
电子银行营销方案
2014/02/22 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
三八妇女节慰问信
2015/02/14 职场文书
教师节获奖感言
2015/07/31 职场文书
2015元旦感言
2015/12/09 职场文书
Mysql 文件配置解析介绍
2022/05/06 MySQL
mysql全面解析json/数组
2022/07/07 MySQL