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实现页面打印的三种方法
Mar 05 Javascript
比较详细的javascript对象的property和prototype是什么一种关系
Aug 06 Javascript
JQuery 绑定事件时传递参数的实现方法
Oct 13 Javascript
JS实现可拖曳、可关闭的弹窗效果
Sep 26 Javascript
微信小程序 页面之间传参实例详解
Jan 13 Javascript
Angular.JS中的指令引用template与指令当做属性详解
Mar 30 Javascript
javascript过滤数组重复元素的实现方法
May 03 Javascript
js获取一组日期中最近连续的天数
May 25 Javascript
微信小程序动画(Animation)的实现及执行步骤
Oct 28 Javascript
angular学习之动态创建表单的方法
Dec 07 Javascript
vue 详情跳转至列表页实现列表页缓存
Mar 27 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
Jun 19 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 zend 相对路径问题
2009/01/12 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
js Array对象的扩展函数代码
2013/04/24 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
简单方法判断JavaScript对象为null或者属性为空
2014/09/26 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
浅析vue数据绑定
2017/01/17 Javascript
用vue的双向绑定简单实现一个todo-list的示例代码
2017/08/03 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
vue中使用vue-cli接入融云实现即时通信
2019/04/19 Javascript
这样回答继承可能面试官更满意
2019/12/10 Javascript
python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
2009/04/09 Python
Python中的迭代器漫谈
2015/02/03 Python
基于Python实现文件大小输出
2016/01/11 Python
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
详解Python中is和==的区别
2019/03/21 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
python request 模块详细介绍
2020/11/10 Python
意大利和国际奢侈品牌购物网站:Suitnegozi.com
2021/01/15 全球购物
GWT都有什么特性
2016/12/02 面试题
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
优秀求职信范文分享
2013/12/19 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
终止合同协议书
2014/04/17 职场文书
大学生简历求职信
2014/06/24 职场文书
学校师德师风自我剖析材料
2014/09/29 职场文书
小学六年级班主任工作经验交流材料
2015/11/02 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技