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 相关文章推荐
ext实现完整的登录代码
Aug 08 Javascript
基于jquery的15款幻灯片插件
Apr 10 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
Jun 27 Javascript
jquery获取tr并更改tr内容示例代码
Feb 13 Javascript
js隐式全局变量造成的bug示例代码
Apr 22 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
学习Node.js模块机制
Oct 17 Javascript
关于Angular2 + node接口调试的解决方案
May 28 Javascript
swiper 自动图片无限轮播实现代码
May 21 Javascript
vue计算属性get和set用法示例
Feb 08 Javascript
jQuery事件blur()方法的使用实例讲解
Mar 30 jQuery
vue仿ios列表左划删除
Sep 26 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递归调用与静态变量使用
2012/12/16 PHP
PHP过滤★等特殊符号的正则
2014/01/27 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
php计算一个文件大小的方法
2015/03/30 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
2018/08/15 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
PHP 实现重载
2021/03/09 PHP
Javascript 更新 JavaScript 数组的 uniq 方法
2008/01/23 Javascript
namespace.js Javascript的命名空间库
2011/10/11 Javascript
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
[02:17]《辉夜杯》TRG战队巡礼
2015/10/26 DOTA
wxPython使用系统剪切板的方法
2015/06/16 Python
20招让你的Python飞起来!
2016/09/27 Python
python实现祝福弹窗效果
2019/04/07 Python
学习和使用python的13个理由
2019/07/30 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
解决Jupyter notebook中.py与.ipynb文件的import问题
2020/04/21 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
出国留学自荐信
2013/10/25 职场文书
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
运动会报道稿大全
2015/07/23 职场文书
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis