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 相关文章推荐
文本加密解密
Jun 23 Javascript
autoPlay 基于jquery的图片自动播放效果
Dec 07 Javascript
详解JavaScript ES6中的模板字符串
Jul 28 Javascript
javascript之Array 数组对象详解
Jun 07 Javascript
jquery轮播的实现方式 附完整实例
Jul 28 Javascript
XMLHttpRequest Level 2 使用指南
Aug 26 Javascript
Angular1.x自定义指令实例详解
Mar 01 Javascript
nginx配置React静态页面的方法教程
Nov 03 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
Jun 05 Javascript
JavaScript事件对象event用法分析
Jul 27 Javascript
angular6开发steps步骤条组件
Jul 04 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
May 13 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常用数学函数汇总
2014/11/21 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
Thinkphp页面跳转设置跳转等待时间的操作
2019/10/16 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
URL编码转换,escape() encodeURI() encodeURIComponent()
2006/12/27 Javascript
基于node.js的快速开发透明代理
2010/12/25 Javascript
在jQuery1.5中使用deferred对象 着放大镜看Promise
2011/03/12 Javascript
jQuery级联操作绑定事件实例
2014/09/02 Javascript
node.js中的emitter.emit方法使用说明
2014/12/10 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
vue2.0 实现富文本编辑器功能
2019/05/26 Javascript
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
vue之组件内监控$store中定义变量的变化详解
2019/11/08 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
linux下python抓屏实现方法
2015/05/22 Python
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
Python如何快速实现分布式任务
2017/07/06 Python
python进阶_浅谈面向对象进阶
2017/08/17 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
python sorted函数原理解析及练习
2020/02/10 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
J2EE是技术还是平台还是框架
2016/08/14 面试题
法律专业应届本科毕业生求职信
2013/10/25 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
音乐课外活动总结
2015/05/09 职场文书
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL