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 相关文章推荐
Jquery submit()无法提交问题
Apr 21 Javascript
固定网页背景图同时保持图片比例的思路代码
Aug 15 Javascript
js在指定位置增加节点函数insertBefore()用法实例
Jan 12 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
Oct 26 Javascript
vue.js实现含搜索的多种复选框(附源码)
Mar 23 Javascript
jQuery实现的form转json经典示例
Oct 10 jQuery
原生js封装的ajax方法示例
Aug 02 Javascript
vue+element+Java实现批量删除功能
Apr 08 Javascript
vue实现分页栏效果
Jun 28 Javascript
微信小程序8种数据通信的方式小结
Feb 03 Javascript
使用 JavaScript 制作页面效果
Apr 21 Javascript
小程序实现筛子抽奖
May 26 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
如何在PHP中使用Oracle数据库(5)
2006/10/09 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
PHP写日志的实现方法
2014/11/05 PHP
关于php中一些字符串总结
2016/05/05 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
javascript网页关键字高亮代码
2008/07/30 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
使用Jenkins部署React项目的方法步骤
2019/03/11 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
js实现点赞效果
2020/03/16 Javascript
javascript 使用sleep函数的常见方法详解
2020/04/26 Javascript
原生js实现自定义难度的扫雷游戏
2021/01/22 Javascript
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
Python Tkinter实现简易计算器功能
2018/01/30 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
python实现PCA降维的示例详解
2020/02/24 Python
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
C语言编程练习
2012/04/02 面试题
Linux文件操作命令都有哪些
2016/07/23 面试题
产品推广策划方案
2014/05/10 职场文书
2015年三八妇女节活动总结
2015/02/06 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
北京爱情故事观后感
2015/06/12 职场文书
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电