状态嵌套的方法

状态可以相互嵌套。有三个嵌套的方法:
点标记法
在$stateProvider中可以使用点语法来表示层次结构,下面,contacts.list是contacts的子状态。
$stateProvider
.state('contacts', {})
.state('contacts.list', {});
使用parent属性,指定一个父状态的名称字符串
$stateProvider
.state('contacts', {})
.state('list', {
parent: 'contacts'
});
基于对象的状态
如果你不喜欢使用基于字符串的状态,您还可以使用基于对象的状态。name属性将在状态对象内部设置,在所有的子状态对象中设置parent属性为父状态对象,像下面这样:
var contacts = {
name: 'contacts', //mandatory
templateUrl: 'contacts.html'
}
var contactsList = {
name: 'list', //mandatory
parent: contacts, //mandatory
templateUrl: 'contacts.list.html'
}
$stateProvider
.state(contacts)
.state(contactsList)
$state.transitionTo(states.contacts);在方法调用和属性比较时可以直接引用状态对象:
$state.current === states.contacts; $state.includes(states.contacts)
注册状态的顺序
可以以任何顺序和跨模块注册状态,也可以在父状态存在之前注册子状态。一旦父状态被注册,将触发自动排序,然后注册子状态。
状态命名
状态不允许重名,当使用“点标记法”,parent属性被推测出来,但这并不会改变状态的名字;当不使用“点标记法”时,parent属性必须明确指定,但你仍然不能让任何两个状态有相同的名称,例如你不能有两个不同的状态命名为”edit”,即使他们有不同的父状态。
嵌套状态和视图
当应用程序在一个特定的状态 - 当一个状态是活动状态时 - 其所有的父状态都将成为活跃状态。下面例子中,当”contacts.list”是活跃状态时,”contacts”也将隐性成为活跃状态,因为他是”contacts.list”的父状态。
子状态将把其对应的模板加载到父状态对应模板的ui-view中。
$stateProvider
.state('contacts', {
templateUrl: 'contacts.html',
controller: function($scope){
$scope.contacts = [{ name: 'Alice' }, { name: 'Bob' }];
}
})
.state('contacts.list', {
templateUrl: 'contacts.list.html'
});
function MainCtrl($state){
$state.transitionTo('contacts.list');
}
<!-- index.html --> <body ng-controller="MainCtrl"> <div ui-view></div> </body>
<!-- contacts.html --> <h1>My Contacts</h1> <div ui-view></div>
<!-- contacts.list.html -->
<ul>
<li ng-repeat="contact in contacts">
<a>{{contact.name}}</a>
</li>
</ul>
子状态将从父状态继承哪些属性?
子状态将从父母继承以下属性:
除了这些,没有其他属性继承下来(比如controllers、templates和url等)
继承解决的依赖项
版本 v0.2.0 的新特性
子状态将从父状态继承通过解决器解决的依赖注入项,并且可以重写(overwrite)依赖项,可以将解决依赖项注入子状态的控制器和解决函数中。
$stateProvider.state('parent', {
resolve:{
resA: function(){
return {'value': 'A'};
}
},
controller: function($scope, resA){
$scope.resA = resA.value;
}
})
.state('parent.child', {
resolve:{
// 将父状态的解决依赖项注入到子状态的解决函数中
resB: function(resA){
return {'value': resA.value + 'B'};
}
},
// 将父状态的解决依赖项注入到子状态的控制器中
controller: function($scope, resA, resB){
$scope.resA2 = resA.value;
$scope.resB = resB.value;
}
继承自定义data属性值
子状态将从父状态继承自定义data属性值,并且可以重写(overwrite)data属性值
$stateProvider.state('parent', {
data:{
customData1: "Hello",
customData2: "World!"
}
})
.state('parent.child', {
data:{
// customData1 inherited from 'parent'
// 覆盖了 customData2 的值
customData2: "UI-Router!"
}
});
$rootScope.$on('$stateChangeStart', function(event, toState){
var greeting = toState.data.customData1 + " " + toState.data.customData2;
console.log(greeting);
// 'parent'被激活时,输出 "Hello World!"
// 'parent.child'被激活时,输出 "Hello UI-Router!"
})
Abstract States 抽象状态
一个抽象的状态可以有子状态但不能显式激活,它将被隐性激活当其子状态被激活时。
下面是一些你将可能会使用到抽象状态的示例:
请记住:抽象的状态模板仍然需要<ui-view/>,来让自己的子状态模板插入其中。因此,如果您使用抽象状态只是为了预提供基url、提供解决依赖项或者自定义data、运行onEnter/Exit函数,你任然需要设置template: "<ui-view/>"。
抽象状态使用示例:
为子状态提供一个基url,子状态的url是相对父状态的
$stateProvider
.state('contacts', {
abstract: true,
url: '/contacts',
// Note: abstract still needs a ui-view for its children to populate.
// You can simply add it inline here.
template: '<ui-view/>'
})
.state('contacts.list', {
// url will become '/contacts/list'
url: '/list'
//...more
})
.state('contacts.detail', {
// url will become '/contacts/detail'
url: '/detail',
//...more
})
将子状态模板插入到父状态指定的ui-view中
$stateProvider
.state('contacts', {
abstract: true,
templateURL: 'contacts.html'
)
.state('contacts.list', {
// loaded into ui-view of parent's template
templateUrl: 'contacts.list.html'
})
.state('contacts.detail', {
// loaded into ui-view of parent's template
templateUrl: 'contacts.detail.html'
})
<!-- contacts.html --> <h1>Contacts Page</h1> <div ui-view></div>
完整示例
$stateProvider
.state('contacts', {
abstract: true,
url: '/contacts',
templateUrl: 'contacts.html',
controller: function($scope){
$scope.contacts = [{ id:0, name: "Alice" }, { id:1, name: "Bob" }];
}
})
.state('contacts.list', {
url: '/list',
templateUrl: 'contacts.list.html'
})
.state('contacts.detail', {
url: '/:id',
templateUrl: 'contacts.detail.html',
controller: function($scope, $stateParams){
$scope.person = $scope.contacts[$stateParams.id];
}
})
<!-- contacts.html --> <h1>Contacts Page</h1> <div ui-view></div>
<!-- contacts.list.html -->
<ul>
<li ng-repeat="person in contacts">
<a ng-href="#/contacts/{{person.id}}" rel="external nofollow" >{{person.name}}</a>
</li>
</ul>
<!-- contacts.detail.html -->
<h2>{{ person.name }}</h2>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# angularjs
# 状态嵌套
# 视图嵌套
# ui
# router
# 嵌套视图
# 详解angularjs 关于ui-router分层使用
# AngularJS路由Ui-router模块用法示例
# 详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
# 详解AngularJs ui-router 路由的简单介绍
# angularjs ui-router中路由的二级嵌套
# AngularJS ui-router (嵌套路由)实例
# 浅析angularJS中的ui-router和ng-grid模块
# Angularjs中UI Router的使用方法
# Angularjs中UI Router全攻略
# AngularJS 使用 UI Router 实现表单向导
# 深究AngularJS之ui-router详解
# 自定义
# 重写
# 可以使用
# 提供一个
# 应用程序
# 自己的
# 是一个
# 如果您
# 他是
# 将在
# 你不
# 能在
# 也将
# 能让
# 能有
# 将被
# 可以直接
# 都将
# 会使
# 你将
相关文章:
北京网站制作的公司有哪些,北京白云观官方网站?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
东莞专业制作网站的公司,东莞大学生网的网址是什么?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
高端云建站费用究竟需要多少预算?
建站之星客服服务时间及联系方式如何?
如何用花生壳三步快速搭建专属网站?
已有域名和空间如何快速搭建网站?
北京专业网站制作设计师招聘,北京白云观官方网站?
如何快速搭建高效简练网站?
宝塔建站助手安装配置与建站模板使用全流程解析
如何零基础开发自助建站系统?完整教程解析
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
广州美橙建站如何快速搭建多端合一网站?
建站10G流量真的够用吗?如何应对访问高峰?
XML的“混合内容”是什么 怎么用DTD或XSD定义
香港网站服务器数量如何影响SEO优化效果?
如何零成本快速生成个人自助网站?
Swift中switch语句区间和元组模式匹配
定制建站方案优化指南:企业官网开发与建站费用解析
网站制作公司,橙子建站是合法的吗?
英语简历制作免费网站推荐,如何将简历翻译成英文?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
如何确保FTP站点访问权限与数据传输安全?
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何通过网站建站时间优化SEO与用户体验?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
实例解析angularjs的filter过滤器
微课制作网站有哪些,微课网怎么进?
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
建站主机如何安装配置?新手必看操作指南
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何选择高效便捷的WAP商城建站系统?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
建站之星备案流程有哪些注意事项?
如何基于云服务器快速搭建个人网站?
,柠檬视频怎样兑换vip?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
网站按钮制作软件,如何实现网页中按钮的自动点击?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
建站之星免费版是否永久可用?
宝塔新建站点报错如何解决?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何快速搭建个人网站并优化SEO?
如何通过山东自助建站平台快速注册域名?
网站制作企业,网站的banner和导航栏是指什么?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
网站制作公司排行榜,抖音怎样做个人官方网站
如何高效利用亚马逊云主机搭建企业网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。