简单讲解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 相关文章推荐
用js实现的自定义的对话框的实现代码
Mar 21 Javascript
多浏览器兼容性比较好的复制到剪贴板的js代码
Oct 09 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
Aug 02 Javascript
深入理解javascript作用域和闭包
Sep 23 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
Oct 31 Javascript
加载列表时jquery获取ul中第一个li的属性
Nov 02 Javascript
jQuery实现网页抖动的菜单抖动效果
Aug 07 Javascript
在javascript中创建对象的各种模式解析
May 16 Javascript
JS新包管理工具yarn和npm的对比与使用入门
Dec 09 Javascript
详解jQuery中基本的动画方法
Dec 14 Javascript
bootstrap滚动监控器使用方法解析
Jan 13 Javascript
angular 服务随记小结
May 06 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 读取文件头判断文件类型的实现代码
2013/08/05 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
WordPress中设置Post Type自定义文章类型的实例教程
2016/05/10 PHP
PHP解决中文乱码
2017/04/28 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
Javascript 面向对象之重载
2010/05/04 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
详解JavaScript对象和数组
2015/12/03 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
js阻止浏览器默认行为的简单实例
2016/05/15 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
vue服务端渲染添加缓存的方法
2018/09/18 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
在python下使用tensorflow判断是否存在文件夹的实例
2019/06/10 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
如何设置Java的运行环境
2013/04/05 面试题
与UNIX有关的几个名词
2015/09/17 面试题
交通事故协议书范本
2014/11/18 职场文书
出国签证在职证明范本
2014/11/24 职场文书
茶花女读书笔记
2015/06/29 职场文书
MySQL 重写查询语句的三种策略
2021/05/10 MySQL
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python