简单讲解AngularJS的Routing路由的定义与使用


Posted in Javascript onMarch 05, 2016

在单页面应用中,视图之间的跳转就显尤为重要的,随着应用越来越复杂,我们需要用一种方法来精确控制什么时候该呈现怎样的页面给用户。

咱们可以通过在主页面中引入不同的模板来支持不同页面的切换,但是这么做的缺点就是,越来越多的内嵌代码导致最后难以管理。

通过ng-include指令我们可以把很多的模板整合在视图中,但是我们有更好的方法来处理这种情况,我们可以把视图打散成layout和模板视图,然后根据用户访问的特定的URL来显示需要的视图

我们可以将这些“碎片”在一个布局模板中拼接起来

AngularJS通过在$routeProvider($route服务的提供者)上声明routes来实现上面的构想

使用$routeProvider,我们可以更好的利用浏览历史的API并且可以让用户可以把当前路径存成书签以方便以后的使用

在我们的应用中设定路由,我们需要做两件事情:第一,我们需要指出我们存放将要存放新页面内容的布局模板在哪里。比如,如果我们想在所有页面都配上header和footer,我们可以这样设计布局模板:

<header>
 <h1>Header</h1>
</header>
<div class="content">
 <div ng-view></div>
</div>
<footer>
 <h5>Footer</h5>
</footer>

ng-view指令将高速$routeProvider在哪里渲染模板

第二,我们需要配置我们的路由信息,我们将在应用中配置$routeProvider

$routeProvider提供了两种方法处理路由:when和otherwise。 方法when接收两个参数,第一个设置$location.path(). (直接用“//”也没有问题)

定义
定义路由非常容易,在我们的应用mian模块里面注入ngRoute依赖就可以了

angular.module('myApp', ['ngRoute'])
 .config(function($routeProvider) {});

现在,我们就可以给应用定义路由了。在路由模块里面的.config()方法里面注入了$routeProvider,上面的代码给我们演示了两个用于定义路由的方法。

when()

when()方法有两个参数,我们希望匹配的浏览器url和路由操作对象。一般main route经常使用“/”来表示,也可以定义URL参数,在controller里面就使用$routeParams获取url参数。

templateUrl: 表示路由跳转的view模板

controller: 控制器

angular.module('myApp', ['ngRoute'])
  .config(function($routeProvider) {
   $routeProvider
    .when('/', {
     templateUrl: 'views/main.html',
     controller: 'MainCtrl'
    })
    .when('/day/:id', {
     templateUrl: 'views/day.html',
     controller: 'DayCtrl'
    })

otherwise()

otherwise()定义了当应用找不到指定路由的时候跳转的路由

angular.module('myApp', ['ngRoute'])
.config(function($routeProvider) {
 $routeProvider
  .when('/', {
   templateUrl: 'views/main.html',
   controller: 'MainCtrl'
  })
  .when('/day/:id', {
   templateUrl: 'views/day.html',
   controller: 'DayCtrl'
  })
  .otherwise({
   redirectTo: '/'
  });
})

使用
定义好了路由需要怎么使用呢?我们要告诉angular页面的哪一个部分是我们希望转换的,这需要使用到ng-view指令

<div class="header">My page</div>
<div ng-view></div>
<span class="footer">A footer</span>

这样就只有<div ng-view></div>会被更新, header/footer都始终保持不变

Javascript 相关文章推荐
比Jquery的document.ready更快的方法
Apr 28 Javascript
extjs 初始化checkboxgroup值的代码
Sep 21 Javascript
解析Jquery中如何把一段html代码动态写入到DIV中(实例说明)
Jul 09 Javascript
javascript中通过arguments参数伪装方法重载
Oct 08 Javascript
jQuery中removeProp()方法用法实例
Jan 05 Javascript
Bootstrap CSS组件之导航(nav)
Dec 17 Javascript
js中document.referrer实现移动端返回上一页
Feb 22 Javascript
jquery dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
JavaScript切换搜索引擎的导航网页搜索框实例代码
Jun 11 Javascript
JS基于递归实现网页版计算器的方法分析
Dec 20 Javascript
jQuery实现图片简单轮播功能示例
Aug 13 jQuery
在vue中使用vant TreeSelect分类选择组件操作
Nov 02 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
Mar 05 #Javascript
详解JavaScript的AngularJS框架中的表达式与指令
Mar 05 #Javascript
深入解析AngularJS框架中$scope的作用与生命周期
Mar 05 #Javascript
JS判断字符串字节数并截取长度的方法
Mar 05 #Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
Mar 05 #Javascript
js控制TR的显示隐藏
Mar 04 #Javascript
Node.js操作Firebird数据库教程
Mar 04 #Javascript
You might like
php empty函数判断mysql表单是否为空
2010/04/12 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
2018/11/30 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
python 实现UTC时间加减的方法
2018/12/31 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
Django模型中字段属性choice使用说明
2020/03/30 Python
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
Java中compareTo和compare的区别
2016/04/12 面试题
档案管理员岗位职责
2013/12/01 职场文书
八年级音乐教学反思
2014/01/09 职场文书
大专毕业自我鉴定
2014/02/04 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
优秀员工评语
2014/02/10 职场文书
幼儿园教师自我评价
2015/03/04 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
导游词之上饶龟峰
2019/10/25 职场文书
Go语言基础函数基本用法及示例详解
2021/11/17 Golang