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 相关文章推荐
多浏览器支持的右下角浮动窗口
Apr 01 Javascript
js TextArea的选中区域处理
Dec 28 Javascript
jQuery实现的多选框多级联动插件
May 02 Javascript
js拼接html注意问题示例探讨
Jul 14 Javascript
移动端JQ插件hammer使用详解
Jul 03 Javascript
jQuery页面刷新(局部、全部)问题分析
Jan 09 Javascript
javascript 解决浏览器不支持的问题
Sep 24 Javascript
JS禁止查看网页源代码的实现方法
Oct 12 Javascript
微信小程序实现收藏与取消收藏切换图片功能
Aug 03 Javascript
微信小程序自定义select下拉选项框组件的实现代码
Aug 28 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
Feb 08 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
Nov 19 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
星际RPG字典
2020/03/04 星际争霸
PHP 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
php并发对MYSQL造成压力的解决方法
2013/02/21 PHP
PHP操作MySQL事务实例
2014/11/05 PHP
JAVASCRIPT HashTable
2007/01/22 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
js自定义回调函数
2015/12/13 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
2018/08/31 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
python实现比较两段文本不同之处的方法
2015/05/30 Python
在Python的Django框架中包装视图函数
2015/07/20 Python
python更新列表的方法
2015/07/28 Python
Python简单实现enum功能的方法
2016/04/25 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
Python使用openpyxl读写excel文件的方法
2017/06/30 Python
Django结合ajax进行页面实时更新的例子
2019/08/12 Python
Python中内建模块collections如何使用
2020/05/27 Python
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
中专毕业生的自我鉴定
2013/12/01 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
2014年社区妇联工作总结
2014/12/02 职场文书
优秀团员事迹材料
2014/12/25 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript