AngularJS基于ui-route实现深层路由的方法【路由嵌套】


Posted in Javascript onDecember 14, 2016

本文实例讲述了AngularJS基于ui-route实现深层路由的方法。分享给大家供大家参考,具体如下:

1.前面我们通过了简单的ng-route实现了简单层次的路由,对于深层次的路由,我们可以通过ui-route来实现。

(1)ng-route的局限性:一个页面无法嵌套多个视图,也就是说一个页面只能有包含一个页面一个控制器的切换。
(2)ui-route的改进:在具有富客户端的单页应用中,要在一个页面中呈现不同的视图,我们可以通过ui-route实现路由的嵌套。

2 . ui-route的使用方法

(1)首先加载angular-ui-route.js

<script src="js/angular-ui-router.js"></script>

(2)设置HTML页面,这里不同于ng-route中的ng-view

<ul>
  <li><a ui-sref="index">首页</a></li>
  <li><a ui-sref="fruit">水果</a></li>
  <li><a ui-sref="vegetable">蔬菜</a></li>
 </ul>

(3)在JS中配置路由

(因为chorme不支持本地文件访问,而FF支持,这里不想搭建本地服务器的,可以用火狐浏览器调试)

配置路由的代码如下:

angular.module('myapp',['ui.router'])
.config(function($stateProvider,$urlRouterProvider){
  $urlRouterProvider.otherwise('/index');
  $stateProvider.state('fruit',{
    url:'/fruit',
    templateUrl:'fruit.html'
  })
  .state('vegetable',{
    url:'/vegetable',
    templateUrl:'vegetable.html'
  })
  .state('index',{
    url:'/index',
    template:'<h2>这是首页</h2>'
  });
});

因为在这里我们将index.html和fruit.html以及vegetable.html放置在
了同一个目录下,template下的路径建议使用绝对路径的形式。

效果如下,当初始默认界面为:

AngularJS基于ui-route实现深层路由的方法【路由嵌套】

点击水果,切换到水果页面:

AngularJS基于ui-route实现深层路由的方法【路由嵌套】

点击蔬菜,切换到蔬菜页面:

AngularJS基于ui-route实现深层路由的方法【路由嵌套】

这里介绍了ui-route页面的基础用法,这个用法与ng-route实现的功能大体上是一致的,下面我们来看各个配置属性的基本含义:

I)template/templateUrl

template:字符串方式的模板内容,或者是一个返回html的函数
templateUrl:模板路径或者是返回模板路径的函数
templateProvider:返回HTML内容的函数

例如:在我们的例子中所写的

.state('vegetable',{
    url:'/vegetable',
    templateUrl:'vegetable.html'
  })
  .state('index',{
    url:'/index',
    template:'<h2>这是首页</h2>'
  });

II).controller

控制器,返回对应url模板的控制器名称,或者是对应url模板的控制器函数。如果没有对应的模板定义,控制器对象就不会被创建

III).resolve

使用resolve功能,我们可以准备一组用来注入到控制器的依赖对象。在ngRoute中,resolve可以在实际渲染之前解决掉promise,resolve选项提供一个对象,对象中的key就是准备注入到controller中的依赖名称,值则是这个创建对象的工厂。

3.通过ui-route实现深层次的路由嵌套

我们在水果页面加上了新的html:

<ul>
  <li><a ui-sref="fruit.orange">橘子</a></li>
  <li><a ui-sref="fruit.apple">苹果</a></li>
  <li><a ui-sref="fruit.banana">香蕉</a></li>
 </ul>
 <div ui-view></div>

我们发现现在一级导航栏底下,多了一个二级导航栏(多了一个ui-view)

重新配置JS路由,在第一级路由fruit的基础上进一步进行嵌套,JS代码
如下:

$stateProvider.state('fruit',{
    url:'/fruit',
    templateUrl:'fruit.html'
})
.state('vegetable',{
    url:'/vegetable',
    templateUrl:'vegetable.html'
})
.state('index',{
    url:'/index',
    template:'<h2>这是首页</h2>'
})
.state('fruit.orange',{
    url:'/orange',
    templateUrl:'orange.html',
})
.state('fruit.apple',{
    url:'/apple',
    templateUrl:'apple.html'
})
.state('fruit.banana',{
    url:'/banana',
    templateUrl:'banana.html'
});

最后我们来看效果:现在点击水果一级切换页面之后显示为:

AngularJS基于ui-route实现深层路由的方法【路由嵌套】

在点击橘子,苹果或者香蕉进行选择,其效果为,即二级切换页面的效果为:

AngularJS基于ui-route实现深层路由的方法【路由嵌套】

4.此外ui-route还可以实现多视图路由,这个功能同一个state下,全页面分为几个细小的页面分别显示不同的值。

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
js类型检查实现代码
Oct 29 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
Dec 19 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
Aug 09 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
Dec 27 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
Jan 21 Javascript
javascript实现图片自动和可控的轮播切换特效
Apr 13 Javascript
JS高级运动实例分析
Dec 20 Javascript
js实现3d悬浮效果
Feb 16 Javascript
React Native AsyncStorage本地存储工具类
Oct 24 Javascript
JavaScript中使用import 和require打包后实现原理分析
Mar 07 Javascript
vue.js中实现登录控制的方法示例
Apr 23 Javascript
vue中实现左右联动的效果
Jun 22 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
Dec 14 #Javascript
Bootstrap实现圆角、圆形头像和响应式图片
Dec 14 #Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
Dec 14 #Javascript
深入理解jquery中的each用法
Dec 14 #Javascript
Bootstrap基本模板的使用和理解1
Dec 14 #Javascript
Bootstrap栅格系统的使用和理解2
Dec 14 #Javascript
jQuery的extend方法【三种】
Dec 14 #Javascript
You might like
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
第四节--构造函数和析构函数
2006/11/16 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
php异常处理技术,顶级异常处理器
2012/06/13 PHP
PHP 之Section与Cookie使用总结
2012/09/14 PHP
php随机显示指定文件夹下图片的方法
2015/07/13 PHP
PHP的mysqli_stat()函数讲解
2019/01/23 PHP
stripos函数知识点实例分享
2019/02/11 PHP
让你的网站可编辑的实现js代码
2009/10/19 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
js canvas仿支付宝芝麻信用分仪表盘
2016/11/16 Javascript
Vue实现内部组件轮播切换效果的示例代码
2018/04/07 Javascript
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
详解vue中async-await的使用误区
2018/12/05 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
Python实现list反转实例汇总
2014/11/11 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
python print 按逗号或空格分隔的方法
2018/05/02 Python
python实现音乐下载的统计
2018/06/20 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
以工厂直接定价的传奇性能:Ben Hogan Golf
2019/01/04 全球购物
酒店总经理助理岗位职责
2014/02/01 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
后进生评语大全
2015/01/04 职场文书
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
在虚拟机中安装windows server 2008的图文教程
2022/06/28 Servers