AngularJS 路由详解和简单实例


Posted in Javascript onJuly 28, 2016

AngularJS 路由

本章节我们将为大家介绍 AngularJS 路由。

AngularJS 路由允许我们通过不同的 URL 访问不同的内容。

通过 AngularJS 可以实现多视图的单页Web应用(single page web application,SPA)。

通常我们的URL形式为 http://runoob.com/first/page,但在单页Web应用中 AngularJS 通过 # + 标记 实现,例如:

http://runoob.com/#/first
http://runoob.com/#/second
http://runoob.com/#/third

当我们点击以上的任意一个链接时,向服务端请的地址都是一样的 (http://runoob.com/)。 因为 # 号之后的内容在向服务端请求时会被浏览器忽略掉。 所以我们就需要在客户端实现 # 号后面内容的功能实现。 AngularJS 路由 就通过 # + 标记 帮助我们区分不同的逻辑页面并将不同的页面绑定到对应的控制器上。

AngularJS 路由详解和简单实例

在以上图形中,我们可以看到创建了两个 URL: /ShowOrders 和 /AddNewOrder。每个 URL 都有对应的视图和控制器。

接下来我们来看一个简单的实例:

<html>
  <head>
  	<meta charset="utf-8">
    <title>AngularJS 路由实例 - 菜鸟教程</title>
  </head>
  <body ng-app='routingDemoApp'>
   
    <h2>AngularJS 路由应用</h2>
    <ul>
      <li><a href="#/">首页</a></li>
      <li><a href="#/computers">电脑</a></li>
      <li><a href="#/printers">打印机</a></li>
      <li><a href="#/blabla">其他</a></li>
    </ul>
     
    <div ng-view></div>
    <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    <script src="http://apps.bdimg.com/libs/angular-route/1.3.13/angular-route.js"></script>
    <script>
      angular.module('routingDemoApp',['ngRoute'])
      .config(['$routeProvider', function($routeProvider){
        $routeProvider
        .when('/',{template:'这是首页页面'})
        .when('/computers',{template:'这是电脑分类页面'})
        .when('/printers',{template:'这是打印机页面'})
        .otherwise({redirectTo:'/'});
      }]);
    </script>
   
   
  </body>
</html>

运行结果:

AngularJS 路由应用

  • 首页
  • 电脑
  • 打印机
  • 其他
这是首页页面

实例解析:

1、载入了实现路由的 js 文件:angular-route.js。

2、包含了 ngRoute 模块作为主应用模块的依赖模块。

angular.module('routingDemoApp',['ngRoute'])

3、使用 ngView 指令。

<div ng-view></div>

该 div 内的 HTML 内容会根据路由的变化而变化。

配置 $routeProvider,AngularJS $routeProvider 用来定义路由规则。

module.config(['$routeProvider', function($routeProvider){
  $routeProvider
    .when('/',{template:'这是首页页面'})
    .when('/computers',{template:'这是电脑分类页面'})
    .when('/printers',{template:'这是打印机页面'})
    .otherwise({redirectTo:'/'});
}]);

AngularJS 模块的 config 函数用于配置路由规则。通过使用 configAPI,我们请求把$routeProvider注入到我们的配置函数并且使用$routeProvider.whenAPI来定义我们的路由规则。

$routeProvider 为我们提供了 when(path,object) & otherwise(object) 函数按顺序定义所有路由,函数包含两个参数:

第一个参数是 URL 或者 URL 正则规则。

第二个参数是路由配置对象。

路由设置对象

AngularJS 路由也可以通过不同的模板来实现。

$routeProvider.when 函数的第一个参数是 URL 或者 URL 正则规则,第二个参数为路由配置对象。

路由配置对象语法规则如下:

$routeProvider.when(url, {
  template: string,
  templateUrl: string,
  controller: string, function 或 array,
  controllerAs: string,
  redirectTo: string, function,
  resolve: object<key, function>
});

参数说明:

template:

如果我们只需要在 ng-view 中插入简单的 HTML 内容,则使用该参数:

.when('/computers',{template:'这是电脑分类页面'})

templateUrl:

如果我们只需要在 ng-view 中插入 HTML 模板文件,则使用该参数:

$routeProvider.when('/computers', {
  templateUrl: 'views/computers.html',
});

以上代码会从服务端获取 views/computers.html 文件内容插入到 ng-view 中。

controller:

function、string或数组类型,在当前模板上执行的controller函数,生成新的scope。

controllerAs:

string类型,为controller指定别名。

redirectTo:

重定向的地址。

resolve:

指定当前controller所依赖的其他模块。

实例

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
<script src="http://apps.bdimg.com/libs/angular-route/1.3.13/angular-route.js"></script>

<script type="text/javascript">
angular.module('ngRouteExample', ['ngRoute'])
.controller('HomeController', function ($scope) { $scope.$route = $route;})
.controller('AboutController', function ($scope) { $scope.$route = $route;})
.config(function ($routeProvider) {
  $routeProvider.
  when('/home', {
    templateUrl: 'embedded.home.html',
    controller: 'HomeController'
  }).
  when('/about', {
    templateUrl: 'embedded.about.html',
    controller: 'AboutController'
  }).
  otherwise({
    redirectTo: '/home'
  });
});
</script>

 
</head>

<body ng-app="ngRouteExample" class="ng-scope">
 <script type="text/ng-template" id="embedded.home.html">
   <h1> Home </h1>
 </script>

 <script type="text/ng-template" id="embedded.about.html">
   <h1> About </h1>
 </script>

 <div> 
  <div id="navigation"> 
   <a href="#/home">Home</a>
   <a href="#/about">About</a>
  </div>
   
  <div ng-view="">
  </div>
 </div>
</body>
</html>

运行结果:

Home About

Home

以上就是对AngularJS 路由的资料整理,希望能帮助AngularJS 编程的同学。

Javascript 相关文章推荐
JavaScript 事件系统
Jul 22 Javascript
JS获取html对象的几种方式介绍
Dec 05 Javascript
JavaScript仿静态分页实现方法
Aug 04 Javascript
jQuery继承extend用法详解
Oct 10 Javascript
jQuery ajax调用webservice注意事项
Oct 08 jQuery
vue基于mint-ui的城市选择3级联动的示例
Oct 25 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
May 07 Javascript
vue-router history模式下的微信分享小结
Jul 05 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
Sep 19 Javascript
Vue快速实现通用表单验证的示例代码
Jan 09 Javascript
javascript实现数字时钟效果
Feb 06 Javascript
Ajax 的初步实现(使用vscode+node.js+express框架)
Jun 18 Javascript
AngularJS 依赖注入详解和简单实例
Jul 28 #Javascript
AngularJS中实现动画效果的方法
Jul 28 #Javascript
项目实践一图片上传之form表单还是base64前端图片压缩(前端图片压缩)
Jul 28 #Javascript
AngularJS中的包含详细介绍及实现示例
Jul 28 #Javascript
AngularJS Bootstrap详细介绍及实例代码
Jul 28 #Javascript
JavaScript中windows.open()、windows.close()方法详解
Jul 28 #Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
Jul 28 #Javascript
You might like
Zend的Registry机制的使用说明
2013/05/02 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
PHP版微信小店接口开发实例
2016/11/12 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
PHP控制反转(IOC)和依赖注入(DI)
2017/03/13 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
2014/06/24 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
javascript获取重复次数最多的字符
2015/07/08 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
mpvue 单文件页面配置详解
2018/12/02 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
vue-autoui自匹配webapi的UI控件的实现
2020/03/20 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
美国著名手表网站:Timepiece
2017/11/15 全球购物
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
印尼在线旅游门户网站:NusaTrip
2019/11/01 全球购物
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
2014年教师党员公开承诺书
2014/05/28 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS