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 相关文章推荐
js类中获取外部函数名的方法与代码
Sep 12 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
Jun 28 Javascript
Tips 带三角可关闭的文字提示
Oct 06 Javascript
javascript基础知识大集锦(一) 推荐收藏
Jan 13 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
May 01 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
Oct 13 Javascript
AngularJS Controller作用域
Jan 09 Javascript
Vue项目中使用jquery的简单方法
May 16 jQuery
p5.js码绘“跳动的小正方形”的实现代码
Oct 22 Javascript
使用Karma做vue组件单元测试的实现
Jan 16 Javascript
在Vue中实现随hash改变响应菜单高亮
Mar 09 Javascript
js+audio实现音乐播放器
Sep 13 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获得当前的脚本网址
2007/12/10 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
JavaScript arguments 多参传值函数
2010/10/24 Javascript
Javascript学习笔记二 之 变量
2010/12/15 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
2015/05/09 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
基于Javascript实现倒计时功能
2016/02/22 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
Python for Informatics 第11章之正则表达式(二)
2016/04/21 Python
解决PyCharm中光标变粗的问题
2017/08/05 Python
PyQt5每天必学之组合框
2018/04/20 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
解决python replace函数替换无效问题
2020/01/18 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
AmazeUI 面板的实现示例
2020/08/17 HTML / CSS
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
英语感恩演讲稿
2014/01/14 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
专家推荐信模板
2014/05/09 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
党员群众路线教育实践活动剖析材料
2014/10/10 职场文书
信用卡工资证明范本
2015/06/19 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
Win11开始菜单添加休眠选项
2022/04/19 数码科技