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 相关文章推荐
获取DOM对象的几种扩展及简写
Oct 09 Javascript
jQuery参数列表集合
Apr 06 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
May 12 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
Oct 29 Javascript
js图片轮播效果实现代码
Apr 18 Javascript
跟我学习javascript的垃圾回收机制与内存管理
Nov 23 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
Nov 09 jQuery
webpack引入eslint配置详解
Jan 22 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
May 12 Javascript
java和js实现的洗牌小程序
Sep 30 Javascript
jQuery实现手风琴效果(蒙版)
Jan 11 jQuery
vue登录页实现使用cookie记住7天密码功能的方法
Feb 18 Vue.js
基于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下检测字符串是否是utf8编码的代码
2008/06/28 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
select组合框option的捕捉实例代码
2008/09/30 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
js窗口震动小程序分享
2016/11/28 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
vue自定义过滤器创建和使用方法详解
2017/11/06 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
vue项目中仿element-ui弹框效果的实例代码
2019/04/22 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
JavaScript代码实现简单计算器
2020/12/27 Javascript
python入门教程之识别验证码
2017/03/04 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
点球小游戏python脚本
2018/05/22 Python
python构建基础的爬虫教学
2018/12/23 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
Python常用库大全及简要说明
2020/01/17 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
学生自我评价范文
2014/02/02 职场文书
房屋租赁意向书
2014/04/01 职场文书
数学教育专业求职信
2014/07/22 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
python基础之匿名函数详解
2021/04/21 Python