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 相关文章推荐
多个iframe自动调整大小的问题
Sep 18 Javascript
用jQuery模拟select下拉框的简单示例代码
Jan 26 Javascript
解决checkbox的attr(checked)一直为undefined问题
Jun 16 Javascript
JQuery fileupload插件实现文件上传功能
Mar 18 Javascript
JavaScript数据类型转换的注意事项
Jul 31 Javascript
jQuery实现的简单百分比进度条效果示例
Aug 01 Javascript
JS定时器用法分析【时钟与菜单中的应用】
Dec 21 Javascript
p5.js入门教程之鼠标交互的示例
Mar 16 Javascript
vue组件实现可搜索下拉框扩展
Oct 23 Javascript
vue+Element-ui实现分页效果实例代码详解
Dec 10 Javascript
jQuery实现每日秒杀商品倒计时功能
Sep 06 jQuery
javascript设计模式 ? 装饰模式原理与应用实例分析
Apr 14 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
一个典型的PHP分页实例代码分享
2011/07/28 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
php计算十二星座的函数代码
2012/08/21 PHP
PHP的Yii框架中View视图的使用进阶
2016/03/29 PHP
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
javascript常见数据验证插件大全
2015/08/03 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
原生JS实现跑马灯效果
2017/02/20 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
2018/11/01 NodeJs
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
Python yield 小结和实例
2014/04/25 Python
部署Python的框架下的web app的详细教程
2015/04/30 Python
如何将python中的List转化成dictionary
2016/08/15 Python
Python实现常见的回文字符串算法
2018/11/14 Python
Python实现最大子序和的方法示例
2019/07/05 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
精灵市场:Pixie Market
2019/06/18 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
高中毕业自我鉴定
2013/12/19 职场文书
期末自我鉴定
2014/01/23 职场文书
玲玲的画教学反思
2014/02/04 职场文书
毕业生如何写自我鉴定
2014/03/15 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
2014年学生会部门工作总结
2014/11/07 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
python基础详解之if循环语句
2021/04/24 Python
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏