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 相关文章推荐
javascript onmouseout 解决办法
Jul 17 Javascript
用javascript关闭本窗口技巧小结
Sep 05 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
Aug 10 Javascript
基于jquery实现放大镜效果
Aug 17 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
May 26 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
Nov 28 Javascript
Easy UI动态树点击文字实现展开关闭功能
Sep 30 Javascript
vue实现底部菜单功能
Jul 24 Javascript
在js代码拼接dom对象到页面上的模板总结
Oct 21 Javascript
Angular PWA使用的Demo示例
Jan 31 Javascript
使用apifm-wxapi模块中的问题及解决方法
Aug 05 Javascript
JavaScript函数柯里化实现原理及过程
Dec 02 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+xslt在windows平台上
2006/10/09 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
thinkphp5框架调用其它控制器方法 实现自定义跳转界面功能示例
2019/07/03 PHP
Javascript 读后台cookie代码
2008/09/15 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
JavaScript面向对象继承原理与实现方法分析
2018/08/09 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
pycharm新建一个python工程步骤
2019/07/16 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
Python 使用 prettytable 库打印表格美化输出功能
2019/12/26 Python
Python集合操作方法详解
2020/02/09 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
python time.strptime格式化实例详解
2021/02/03 Python
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
设备技术员岗位职责
2015/04/11 职场文书
结婚主持人致辞
2015/07/28 职场文书
2019各种保证书范文
2019/06/24 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫