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语法着色引擎(demo及打包文件下载)
Jun 13 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
Jun 28 Javascript
全面解析Angular中$Apply()及$Digest()的区别
Aug 04 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
React-Native使用Mobx实现购物车功能
Sep 14 Javascript
深入浅析Vue中的Prop
Jun 10 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
Nov 08 Javascript
redux.js详解及基本使用
May 24 Javascript
防止Layui form表单重复提交的实现方法
Sep 10 Javascript
python虚拟环境 virtualenv的简单使用
Jan 21 Javascript
原生javascript运动函数的封装示例【匀速、抛物线、多属性的运动等】
Feb 23 Javascript
jquery实现鼠标悬浮弹出气泡提示框
Dec 23 jQuery
基于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分页显示制作详细讲解
2006/12/05 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
PHP错误处理函数register_shutdown_function使用示例
2017/07/03 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
PDO::query讲解
2019/01/29 PHP
PHP实现带进度条的Ajax文件上传功能示例
2019/07/02 PHP
如何在标题栏显示框架内页面的标题
2007/02/03 Javascript
通过javascript设置css属性的代码
2009/12/28 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
使用按钮控制以何种方式打开新窗口的属性介绍
2012/12/17 Javascript
JS在textarea光标处插入文本的小例子
2013/03/22 Javascript
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
ES6正则的扩展实例详解
2017/04/25 Javascript
微信小程序开发的基本流程步骤
2019/01/31 Javascript
python实现数独算法实例
2015/06/09 Python
python如何通过protobuf实现rpc
2016/03/06 Python
Python使用三种方法实现PCA算法
2017/12/12 Python
np.dot()函数的用法详解
2020/01/17 Python
python自动下载图片的方法示例
2020/03/25 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
自荐信格式技巧有哪些呢
2013/11/19 职场文书
环保公益策划方案
2014/08/15 职场文书
新郎结婚保证书
2015/02/26 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python