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中$.click()无效问题分析
Jan 29 Javascript
ECMAScript6中Set/WeakSet详解
Jun 12 Javascript
js调用webservice构造SOAP进行身份验证
Apr 27 Javascript
js模糊查询实例分享
Dec 26 Javascript
AngularJS实现使用路由切换视图的方法
Jan 24 Javascript
jQuery实现淡入淡出的模态框
Feb 09 Javascript
bootstrap模态框示例代码分享
May 17 Javascript
vue安装和使用scss及sass与scss的区别详解
Oct 15 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
Jul 07 Javascript
vue 实现走马灯效果
Oct 28 Javascript
javascript前端和后台进行数据交互方法示例
Aug 07 Javascript
微信小程序实现底部弹出模态框
Nov 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
纯php打造的tab选项卡效果代码(不用js)
2010/12/29 PHP
PHP安全防范技巧分享
2011/11/03 PHP
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
Windows下的PHP安装文件线程安全和非线程安全的区别
2014/04/23 PHP
PHP 二维数组根据某个字段排序的具体实现
2014/06/03 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
php用户注册信息验证正则表达式
2015/11/12 PHP
php短信接口代码
2016/05/13 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
用Div仿showModalDialog模式菜单的效果的代码
2007/03/05 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
详谈nodejs异步编程
2014/12/04 NodeJs
JS的数组迭代方法
2015/02/05 Javascript
jQuery多级联动下拉插件chained用法示例
2016/08/20 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
解决axios post 后端无法接收数据的问题
2019/10/29 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
介绍一下Python下range()函数的用法
2013/11/07 面试题
大学生求职信范文应怎么写
2014/01/01 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
建筑结构施工专业推荐信
2014/02/21 职场文书
入股协议书范本
2014/11/01 职场文书
董事长岗位职责
2015/02/13 职场文书
小学生读书笔记范文
2015/06/30 职场文书
Node.js实现断点续传
2021/06/23 Javascript
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android