AngularJS入门教程之路由机制ngRoute实例分析


Posted in Javascript onDecember 13, 2016

本文实例讲述了AngularJS路由机制ngRoute。分享给大家供大家参考,具体如下:

引言

在我们介绍路由之前我们首先谈一下SPA,所以SPA就是我们现在经常说的单页应用single page APP,为了实现无刷新的视图切换我们之前的做法就是利用AJAX从后取出数据然后渲染在前台页面HTML中,但是AJAX有一个致命的缺点就是不能实现浏览器的后退按钮失效,为了解决这个问题我们通常使用hash,监听hashchange事件来进行视图切换,另一个方法是用HTML5的history API,通过pushState()记录操作历史,监听popstate事件来进行视图切换,也有人把这叫pjax技术。基本流程如下:

AngularJS入门教程之路由机制ngRoute实例分析

如此一来,便形成了通过地址栏进行导航的深度链接(deeplinking ),也就是我们所需要的路由机制。通过路由机制,一个单页应用的各个视图就可以很好的组织起来了。

ng-route包含的内容

ng的路由机制是靠ngRoute提供的,通过hash和history两种方式实现了路由,可以检测浏览器是否支持history来灵活调用相应的方式。ng的路由(ngRoute)是一个单独的模块,包含以下内容:

•服务$routeProvider用来定义一个路由表,即地址栏与视图模板的映射

•服务$routeParams保存了地址栏中的参数,例如{id : 1, name : 'tom'}

•服务$location用来实现用于获取当前url以及改变当前的url,并且存入历史记录

•服务$route完成路由匹配,并且提供路由相关的属性访问及事件,如访问当前路由对应的controller

•指令ngView用来在主视图中指定加载子视图的区域

路由机制的实现

第一步、引入两个依赖文件

<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<script src="http://cdn.bootcss.com/angular.js/1.2.9/angular-route.min.js"></script>

因为路由机制上一个单独的模块,所以我们需要单独的引入路由文件,仅仅引入AngularJS.min.js是不包含路由的,引入文件以后我们还需要在模块声明中注入对ng-route的依赖:

var app = angular.module("myApp", ['ngRoute']);

完成了这些,我们就可以在模板或是controller中使用上面的服务和指令了。下面我们需要定义一个路由表。

第二步:完成路由表的配置

app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider
      .when('/div1', {
        template: '<p>这是div1{{text}}</p>',
        controller: 'div1Controller'
      })
      .when('/div2', {
        template: '<p>这是div2{{text}}</p>',
          controller: 'div2Controller'
      })
      .when('/div3', {
        template: '<p>这是div3{{text}}</p>',
        controller: 'div3Controller'
      })
      .when('/content/:id', {
        template: '<p>这是content{{id}}</p>',
        controller: 'div4Controller'
      })
      .otherwise({
        redirectTo: '/div1'
      });
}]);

$routeProvider提供了定义路由表的服务,它有两个核心方法,when(path,route)和otherwise(params),先看一下核心中的核心when(path,route)方法。

when(path,route)方法接收两个参数,path是一个string类型,表示该条路由规则所匹配的路径,它将与地址栏的内容($location.path)值进行匹配。如果需要匹配参数,可以在path中使用冒号加名称的方式,如:path为/show/:name,如果地址栏是/show/tom,那么参数name和所对应的值tom便会被保存在$routeParams中,像这样:

{name : tom}。我们也可以用*进行模糊匹配,如:/show*/:name将匹配/showInfo/tom。

参数说明如下:

controller //function或string类型。在当前模板上执行的controller函数,生成新的scope
controllerAs //string类型,为controller指定别名
template //string或function类型,视图所用的模板,这部分内容将被ngView引用
templateUrl //string或function类型,当视图模板为单独的html文件或是使用了<script type="text/ng-template">定义模板时使用
resolve //指定当前controller所依赖的其他模块
redirectTo //重定向的地址

第三步:在主视图模板中指定加载子视图的位置

我们的单页面程序都是局部刷新的,那这个“局部”是哪里呢,这就轮到ngView出马了,只需在模板中简单的使用此指令,在哪里用,哪里就是“局部”。

通过以上我们就完成了了一个路由的全部配置过程,在没有接触路由的时候感觉路由这一块是比价难的,但是当我们真正的了解到这一块的原理的时候并不是非常的难,路由在AngularJS中是核心部分所以我们需要牢牢的掌握这一部分。

友情推荐:

看到这可能会有人说如果有个完整的Ddeo就好了,所以说小编给大家推荐一个编写前台代码的工具RunJS并且可以实现代码的共享,小编的这个Demo就在这上面,可在此处查看效果;http://sandbox.runjs.cn/show/gj894e3t#/content/13

此处查看源码:
http://runjs.cn/code/gj894e3t

这样以后我们就可以随意的分享代码,尤其是我们在讲课的时候非常的方便!

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
Jun 29 Javascript
js获取元素在浏览器中的绝对位置
Jul 24 Javascript
深入解析contentWindow, contentDocument
Jul 04 Javascript
判断文档离浏览器顶部的距离的方法
Jan 08 Javascript
jquery实现点击页面计算点击次数
Jan 23 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
Aug 24 Javascript
基于Jquery实现焦点图淡出淡入效果
Nov 30 Javascript
详解webpack的配置文件entry与output
Aug 21 Javascript
echarts学习笔记之箱线图的分析与绘制详解
Nov 22 Javascript
JS求1到任意数之间的所有质数的方法详解
May 20 Javascript
实例分析javascript中的异步
Jun 02 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
解决Window10系统下Node安装报错的问题分析
Dec 13 #Javascript
浅析Jquery操作select
Dec 13 #Javascript
Vue.js使用v-show和v-if的注意事项
Dec 13 #Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
Dec 13 #Javascript
Es6 写的文件import 起来解决方案详解
Dec 13 #Javascript
JS实现图片垂直居中显示小结
Dec 13 #Javascript
Javascript this 函数深入详解
Dec 13 #Javascript
You might like
PHP框架Laravel的小技巧两则
2015/02/10 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
100个不能错过的实用JS自定义函数
2014/03/05 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
JavaScript判断微信浏览器实例代码
2016/06/13 Javascript
jQuery实现微信长按识别二维码功能
2016/08/26 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
搭建vue开发环境
2018/07/19 Javascript
微信小程序实现炫酷的弹出式菜单特效
2019/01/28 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
js设计模式之代理模式及订阅发布模式实例详解
2019/08/15 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
python中去空格函数的用法
2014/08/21 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
python中if及if-else如何使用
2020/06/02 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
2020/08/07 Python
c++工程师面试问题
2013/08/04 面试题
应届毕业生的自我鉴定
2013/11/13 职场文书
毕业自我评价范文
2013/11/17 职场文书
小学生安全演讲稿
2014/04/25 职场文书
就业协议书盖章的注意事项
2014/09/28 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
同学聚会通知短信
2015/04/20 职场文书
东京审判观后感
2015/06/01 职场文书
《老人与海鸥》教学反思
2016/02/16 职场文书
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS