最近研究了一下ui-view多层嵌套,整理了一下

1.最简单的ui-view用法

html部分:

<ul class="nav navbar-nav">
<li ui-sref-active="active"><a ui-sref="home">首页</a></li>
<li ui-sref-active="active"><a ui-sref="news">新闻</a></li>
<li ui-sref-active="active"><a ui-sref="center">个人中心</a></li>
</ul>
<div class="wrap" ui-view></div>

路由配置:

var app = angular.module('myApp',["ui.router"]);
app.config(["$stateProvider","$urlRouterProvider", function ($stateProvider,$urlRouterProvider) {
$stateProvider
.state("home", {
url: '/home',
templateUrl:'template/home.html',
controller:'homeCtrl'
})
.state("news", {
url: '/news',
templateUrl:'template/news.html',
controller:'newsCtrl'
})
.state("details",{
url:'/news/details',
templateUrl:'template/newsDetails.html',
controller:'detailsCtrl'
})
.state("center", {
url: '/center',
templateUrl:'template/setCenter.html',
controller:'centerCtrl'
});
$urlRouterProvider.otherwise('/home');
}]);

2.多视口

html部分:

<ul class="nav navbar-nav">
<li ui-sref-active="active"><a ui-sref="home">首页</a></li>
<li ui-sref-active="active"><a ui-sref="home.news">新闻</a></li>
<li ui-sref-active="active"><a ui-sref="home.center">个人中心</a></li>
</ul>
<div class="warp">
<div class="main" ui-view="home"></div>
<div class="left" ui-view="left"></div>
<div class="right" ui-view="right"></div>
</div>

路由配置:

var app = angular.module('myApp',["ui.router","ui.bootstrap"]);
app.config(["$stateProvider","$urlRouterProvider", function ($stateProvider,$urlRouterProvider) {
$stateProvider
.state("home", {
url: '/home',
views:{
'home':{template:"<div class='body' ui-view='body'></div><div class='footer' ui-view='footer'></div>"},
'left':{template:"<span>left</span>"},
'right':{template:"<span>right</span>"},
'body@home':{templateUrl:'template_views/home.html'},
'footer@home':{template:"<span>首页底部</span>"}
}
})
.state('home.news',{
url:'/news',
views:{
'body@home':{templateUrl:'template_views/news.html'},
'footer@home':{template:"<span>新闻底部</span>"}
}
})
.state('home.newsDetails',{
url:"/news/details/:id",
views:{
'body@home':{
template:"<span>新闻详情</span>",
controller:function ($stateParams) {
alert('id:'+ $stateParams.id);
}
},
'footer@home':{template:"<span>新闻详情底部</span>"}
}
})
.state('home.center',{
url:'/center',
views:{
'body@home':{templateUrl:'template_views/setCenter.html'},
'footer@home':{template:"<span>个人中心底部</span>"}
} }); $urlRouterProvider.otherwise('/home');
}]);

这里需要注意的是路由传参,这里把news.html内容贴出来

<uib-tabset active="activeJustified" justified="true">
<uib-tab index="0" heading="推荐">
<div style="width: 100%;height: 500px;background-color:pink;">
<span class="mouseHand btn" ui-sref="home.newsDetails({id:1})">Justified content</span>
</div>
</uib-tab>
<uib-tab index="1" heading="热点">
<div style="width: 100%;height: 500px;background-color:#b9def0;" ui-sref="home.newsDetails({id:2})">Short Labeled Justified content</div>
</uib-tab>
<uib-tab index="2" heading="股票">
<div style="width: 100%;height: 500px;background-color:darkcyan;" ui-sref="home.newsDetails({id:3})">Long Labeled Justified content</div>
</uib-tab>
</uib-tabset>
ui-sref="home.newsDetails({id:1})"这样跳转的时候就把id传给了新闻详情;在新闻详情的控制器里就可以通过$stateParams.id得到传过来的id

3.多层ui-view嵌套
写了一个小demo,首先看一下结构

myExercise.html代码:
<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
<meta charset="UTF-8">
<script src="lib/angular.js"></script>
<script src="lib/angular-ui-router.js"></script>
<script src="lib/jquery-1.12.3.js"></script>
<script src="lib/bootstrap.js"></script>
<script src="lib/ocLazyLoad-master/dist/ocLazyLoad.js"></script>
<script src="js/myConfig.js"></script>
<script src="js/contentCtrl.js"></script>
<link rel="stylesheet" href="lib/bootstrap.css">
<link rel="stylesheet" href="css/base.css">
<title>ui-view三层嵌套</title>
</head>
<body>
<div ui-view class="wrap"></div>
</body>
</html>
ocLazyLoad.js是用来分步加载js,css等文件的,后面可以再路由配置里看到具体用法,有了这个对于项目初次加载的速度有很大提升,但是不需要的这里也可以不必引入;

js文件夹结构

前两个控制器都是空的,没写什么逻辑就不展示了,先看一下myConfig.js,路由配置(多层嵌套精髓都在这里啦):
var app = angular.module('myApp',["ui.router","oc.lazyLoad"]);
app.config(function ($stateProvider,$locationProvider, $urlRouterProvider,$ocLazyLoadProvider) {
$stateProvider
.state('content',{
url: '/',
views:{
"":{
template: '<div ui-view="header"></div><div ui-view="body"></div>',
controller:'contentCtrl'
},
"header@content":{templateUrl: 'myTemplate/header.html'}
}
})
.state('content.home',{
url:'home',
views:{
"body@content":{
templateUrl:'myTemplate/home.html',
controller:'homeCtrl'
}
},
resolve:{
deps: ['$ocLazyLoad', function($ocLazyLoad) {
// you can lazy load files for an existing module
return $ocLazyLoad.load([
'js/homeCtrl.js',
'css/home.css'
]);
}]
}
})
.state('content.news',{
url:'news',
views:{
"body@content":{template:'<div ui-view></div>'}
}
})
.state('content.news.list',{
url:'/list',
templateUrl:'myTemplate/news.html'
})
.state('content.news.list.recommend',{
url:'/recommend',
templateUrl:'myTemplate/news-list-recommend.html'
})
.state('content.news.list.hot',{
url:'/hot',
templateUrl:'myTemplate/news-list-hot.html'
})
.state('content.news.list.sport',{
url:'/sport',
templateUrl:'myTemplate/news-list-sport.html'
})
.state('content.news.details',{
url:'/details/:type/:id',
templateUrl:'myTemplate/news-details.html',
controller:'newsDetailCtrl',
resolve:{
deps: ['$ocLazyLoad', function($ocLazyLoad) {
// you can lazy load files for an existing module
return $ocLazyLoad.load([
'js/newsDetailCtrl.js',
'css/newsDetail.css'
]);
}]
}
})
.state('content.news.details.comment',{
url:'/details/comment',
templateUrl:'myTemplate/news-detail-comment.html'
})
.state('content.about',{
url:'about',
views:{
"body@content":{templateUrl:'myTemplate/about.html'}
}
}); $urlRouterProvider.otherwise('home'); });

结合路由配置,看一下template模板代码:

首先是header.html

<ul class="nav nav-tabs">
<li role="presentation" class="active" ui-sref-active="active"><a ui-sref="content.home">Home</a></li>
<li role="presentation" ui-sref-active="active"><a ui-sref="content.news.list.recommend">News</a></li>
<li role="presentation" ui-sref-active="active"><a ui-sref="content.about">About</a></li>
</ul>

news.html

<ul class="nav nav-tabs">
<li role="presentation" class="active" ui-sref-active="active"><a ui-sref="content.news.list.recommend">推荐</a></li>
<li role="presentation" ui-sref-active="active"><a ui-sref="content.news.list.hot">热门</a></li>
<li role="presentation" ui-sref-active="active"><a ui-sref="content.news.list.sport">体育</a></li>
</ul>
<div ui-view></div>

news-details.html

<span>{{type}}:新闻详情</span>
<a ui-sref=".comment">查看评论</a>
<div ui-view></div>
<!--news-list-recommend.html-->
<div>
推荐列表
<a ui-sref="^.^.details({type:'recommend',id:2})">点击查看新闻详情,通过相对路径跳转</a>
</div> <!--news-list-hot.html-->
<div>
热门列表
<a ui-sref="content.news.details({type:'hot',id:5})">点击查看新闻详情,通过绝对路径跳转</a>
</div> <!--news-list-sport.html-->
<div>
体育列表
<a ui-sref="content.news.details({type:'sport',id:7})">点击查看新闻详情</a>
</div>

模板就展示这几个了,其它的都是随便写的text文字了,随便写点东西就行,到这里就差不多完成了.

接下来展示一下newsDeatilCtrl.js

angular.module('myApp').controller('newsDetailCtrl',['$scope','$stateParams',function ($scope,$stateParams) {
$scope.type = $stateParams.type;
}]);

这里通过$stateParams来接收路由跳转传过来的参数。

好啦,到这里就大功告成了。


angularjs ui-view多视口多层嵌套路由配置的更多相关文章

  1. 使用ui-route实现多层嵌套路由

    一.预期实现效果: https://liyuan-meng.github.io/uiRouter-app/index.html (项目地址:https://github.com/liyuan-meng ...

  2. VUE router-view 页面布局 (嵌套路由+命名视图)

    嵌套路由 实际生活中的应用界面,通常由多层嵌套的组件组合而成.同样地,URL 中各段动态路径也按某种结构对应嵌套的各层组件,例如: /user/foo/profile /user/foo/posts ...

  3. vue嵌套路由总结

    嵌套路由就是在一个被路由过来的页面下可以继续使用路由,嵌套也就是路由中的路由的意思. 比如在vue中,我们如果不使用嵌套路由,那么只有一个<router-view>,但是如果使用,那么在一 ...

  4. vue路由-动态路由和嵌套路由

    一.动态路由 我们经常需要把某种模式匹配到的所有路由,全都映射到同个组件.例如,我们有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染.那么,我们可以在 vue-route ...

  5. vue嵌套路由 && 404重定向

    第一部分: vue嵌套路由 嵌套路由是什么? 嵌套路由就是在一个被路由过来的页面下可以继续使用路由,嵌套也就是路由中的路由的意思.  比如在vue中,我们如果不使用嵌套路由,那么只有一个<rou ...

  6. vue嵌套路由与404重定向实现方法分析

    第一部分: vue嵌套路由 嵌套路由是什么? 嵌套路由就是在一个被路由过来的页面下可以继续使用路由,嵌套也就是路由中的路由的意思. 比如在vue中,我们如果不使用嵌套路由,那么只有一个<rout ...

  7. 07. vue-router嵌套路由

    嵌套路由用法 1.嵌套路由功能分析 点击父级路由链接显示模板内容 模板内容中又有子级路由链接 点击子级路由链接显示子级模板内容 2.父路由组件模板 父级路由链接 父组件路由填充位 <p> ...

  8. AngularJS 的嵌套路由 UI-Router

    AngularJS 的嵌套路由 UI-Router 本篇文章翻译自:https://scotch.io/tutorials/angular-routing-using-ui-router 演示网站请查 ...

  9. AngularJS ui-router (嵌套路由)

    http://www.oschina.net/translate/angularjs-ui-router-nested-routes AngularJS ui-router (嵌套路由) 英文原文:A ...

随机推荐

  1. 用 Python+nginx+django 打造在线家庭影院

    用 Python+nginx+django 打造在线家庭影院 2018年11月29日 08:46:59 清如許 阅读数:1528   我喜欢看电影,尤其是好的电影,我会看上三四遍,仔细感受电影带给我的 ...

  2. cobbler 自定义安装系统

    1.自定义安装系统(根据mac地址)--name=定义名称--mac=客户端的mac地址--ip-address=需求的ip--subnet=掩码 --gateway=网关--interface=网口 ...

  3. 验证resneXt,densenet,mobilenet和SENet的特色结构

    简介 图像分类对网络结构的要求,一个是精度,另一个是速度.这两个需求推动了网络结构的发展. resneXt:分组卷积,降低了网络参数个数. densenet:密集的跳连接. mobilenet:标准卷 ...

  4. hbase搭建web项目 报500错误 HTTP Status 500 - Unable to compile class for JSP

    在昨天,用hbase做后台搭建web项目时,前边的进行的非常顺利,当运行时便 报错了,截图如下: 这是直接在jsp中接收参数报的错误,如果在servlet中,同样也是报500的错误,虽然显示的不太一样 ...

  5. android-zip解压缩方法

    /** * 解压缩文件到指定的目录. * * @param unZipfileName * 需要解压缩的文件(带路径) * @param mDestPath * 解压缩后存放的路径 **/ publi ...

  6. #!/usr/bin/python和#!/usr/bin/env 的区别

    #!/usr/bin/python 通常在一个.py文件开头都会有这个语句 它只在Linux系统下生效,意思是当作为可执行文件运行时调用的解释器的位置上面代码的意思是调用/usr/bin/下的Pyth ...

  7. 面试题-----ICMP协议简介

    ICMP协议简介 l  ICMP网际控制报文协议,通过它可以知道故障的具体原因和位置. l  由于IP不是为可靠传输服务设计的,ICMP的目的主要是用于在TCP/IP网络中发送出错和控制消息. l  ...

  8. ibatis SQLmap mysql模糊查询字符串拼的三种方法

    在通常情况下iBATIS的参数在sqlmap中使用#param#的形式,参数名以’#’包着,但当使用sql的LIKE语句时就发生了问题,在单引号中无法使用#param#这种形式,下面列举出了3种方法来 ...

  9. EF Core 实现多租户

    目录 SAAS 和多租户 多租户数据隔离方案 使用 EF Core 简单实现多租户 单数据库实现 多数据库实现 源代码 参考 SAAS 和多租户 SaaS(软件及服务)区别于其他应用程序的主要特征就是 ...

  10. 关于 AXI协议的学习解释说明

    AXI(Advanced eXtensible Interface)是一种总线协议,该协议是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture ...