简单讲解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 相关文章推荐
Javascript倒计时页面跳转实例小结
Sep 11 Javascript
js保留小数点后几位的写法
Jan 03 Javascript
js获取当前地址 JS获取当前URL的示例代码
Feb 26 Javascript
jQuery实现的经典滑动门效果
Sep 22 Javascript
JavaScript实现点击按钮就复制当前网址
Dec 14 Javascript
js父页面中使用子页面的方法
Jan 09 Javascript
AngularJs ng-route路由详解及实例代码
Sep 14 Javascript
javaScript基础详解
Jan 19 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
Apr 28 Javascript
原生js封装运动框架的示例讲解
Oct 01 Javascript
利用VS Code开发你的第一个AngularJS 2应用程序
Dec 15 Javascript
全面介绍vue 全家桶和项目实例
Dec 27 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
追求程序速度,而不是编程的速度
2008/04/23 PHP
PHP入门学习笔记之一
2010/10/12 PHP
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
动态为事件添加js代码示例
2009/02/15 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
浅谈django中的认证与登录
2016/10/31 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
澳大利亚冲浪和时尚服装网上购物:SurfStitch
2017/07/29 全球购物
技术副厂长岗位职责
2013/12/26 职场文书
奥巴马演讲稿
2014/01/08 职场文书
责任心演讲稿
2014/05/14 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
运动会200米广播稿
2015/08/19 职场文书
公司晚会主持词
2019/04/17 职场文书
RPM包方式安装Oracle21c的方法详解
2021/08/23 Oracle
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers