简单讲解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 UI Autocomplete 1.8.16 中文输入修正代码
Apr 16 Javascript
JavaScript执行效率与性能提升方案
Dec 21 Javascript
如何使用Javascript正则表达式来格式化XML内容
Jul 04 Javascript
关于删除时的提示处理(确定删除吗)
Nov 03 Javascript
玩转JavaScript OOP - 类的实现详解
Jun 08 Javascript
bootstrap轮播模板使用方法详解
Nov 17 Javascript
JS中使用new Option()实现时间联动效果
Dec 10 Javascript
使用nvm和nrm优化node.js工作流的方法
Jan 17 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
Apr 23 Javascript
详解js常用分割取字符串的方法
May 15 Javascript
angularjs1.X 重构controller 的方法小结
Aug 15 Javascript
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
Apr 17 Vue.js
整理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简介
2006/10/09 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
基于php 随机数的深入理解
2013/06/05 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
smarty缓存用法分析
2014/12/16 PHP
PHP进阶学习之命名空间基本用法分析
2019/06/18 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
jquery模拟按下回车实现代码
2011/09/20 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
js实现简单的碰壁反弹效果
2016/08/30 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
2017/07/25 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
javaScript动态添加Li元素的实例
2018/02/24 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
python 文件与目录操作
2008/12/24 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
Ubuntu16.04安装python3.6.5步骤详解
2020/01/10 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
大整数数相乘的问题
2012/07/22 面试题
车间组长岗位职责
2013/12/20 职场文书
市场部管理制度
2014/02/02 职场文书
淘宝店铺营销方案
2014/02/13 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
2014年绿化工作总结
2014/12/09 职场文书
Python matplotlib安装以及实现简单曲线的绘制
2022/04/26 Python
MySQL sql模式设置引起的问题
2022/05/15 MySQL