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 相关文章推荐
Extjs gridpanel 出现横向滚动条问题的解决方法
Jul 04 Javascript
js简单实现HTML标签Select联动带跳转
Oct 23 Javascript
js变量提升深入理解
Sep 16 Javascript
微信小程序 location API接口详解及实例代码
Oct 12 Javascript
浅谈javascript中的事件冒泡和事件捕获
Dec 28 Javascript
Vue.js开发环境快速搭建教程
Mar 17 Javascript
ES6中module模块化开发实例浅析
Apr 06 Javascript
基于bootstrap写的一点localStorage本地储存
Nov 21 Javascript
基于vue实现圆形菜单栏组件
Jul 05 Javascript
微信小程序开发常见问题及解决方案
Jul 11 Javascript
jQuery 添加元素和删除元素的方法
Jul 15 jQuery
Js数组扁平化实现方法代码总汇
Nov 11 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
SONY ICF-SW55的电路分析
2021/03/02 无线电
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
laravel-admin 实现在指定的相册下添加照片
2019/10/21 PHP
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
extjs 如何给column 加上提示
2014/07/29 Javascript
javascript强制点击广告的方法
2015/02/06 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
JS实现自动切换文字的导航效果代码
2015/08/27 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
Layui表格监听行单双击事件讲解
2019/11/14 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Python 12306抢火车票脚本
2018/02/07 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
POP文化和音乐灵感的时尚:Hot Topic
2019/06/19 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
森林防火工作方案
2014/02/14 职场文书
付款委托书范本
2014/04/04 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
促销活动总结模板
2014/07/01 职场文书
酒店前台辞职书
2015/02/26 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
Python日志模块logging用法
2022/06/05 Python