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与flash交互通信基础教程
Aug 07 Javascript
JavaScript获得选中文本内容的方法
Dec 02 Javascript
JS俄罗斯方块,包含完整的设计理念
Dec 11 Javascript
javascript中定义私有方法说明(private method)
Jan 27 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
Aug 06 Javascript
BootStrap入门学习第一篇
Aug 28 Javascript
浅谈实现vue2.0响应式的基本思路
Feb 13 Javascript
Webpack之tree-starking 解析
Sep 11 Javascript
Javascript中绑定click事件的四种方式介绍
Oct 26 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
Nov 25 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
Nov 01 Javascript
Vue中rem与postcss-pxtorem的应用详解
Nov 20 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
星际争霸任务指南——人族
2020/03/04 星际争霸
smarty简单分页的实现方法
2014/10/27 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
jQuery版仿Path菜单效果
2011/12/15 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
2019/05/27 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
Python读取ini文件、操作mysql、发送邮件实例
2015/01/01 Python
星球大战与Python之间的那些事
2016/01/07 Python
python中的计时器timeit的使用方法
2017/10/20 Python
Python语言异常处理测试过程解析
2020/01/08 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
2020/12/09 Python
MATCHESFASHION澳大利亚/亚太地区:英国时尚奢侈品电商
2020/01/14 全球购物
酒店采购员岗位职责
2014/03/14 职场文书
实验室的标语
2014/06/20 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
工作岗位职责范本
2015/02/15 职场文书
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL