使用Angular UI Router,如何使一个状态成为所有状态的子状态
With Angular UI Router, how do make a state a child of all states?
我想在Angular UI Router中将模式对话框设置为单独的状态。然而,我有一种情况,模态框可以/应该出现在所有状态的顶部。。。我不确定这是否可能。
例如,假设/store
和/admin
是两个独立的顶级状态。现在想象一下,我有一个不相关的模态对话框,比如一个联系人表单(只是一个例子),应该放在每个表单的顶部。
如果我将其建模为/contact
,那么/store
或/admin
状态显然会被遗忘,因此模态后面的背景是空白的。
解决方案可能是有两个子状态,如/store/contact
和/admin/contact
,这将保留模式对话框后面的内容。。。然而,这种方法不适用于X个顶级状态。
简而言之,我怎么能说/contact
是所有状态的子级,而不考虑嵌套?这可能吗?或者在这种情况下,我只是不必使用angular UI路由器吗?
UI-Router
状态机用父子关系表示。所以答案是-每个孩子都可以有一个父母。这是事实。并且它可以被视为";一种不起作用的回答"。
但是,如果我们真的想让许多子状态/contact
(where
联系 feature is moved to its own state)
,我会而不是说重复定义是个问题。
它可以标记为开销,但状态只是一个配置。它对性能没有太大影响。视图和控制器无论如何都是按状态实例化的。。。而不管其状态定义
// declare once view
var contactState = {
controller: ...
template: ...
...
};
// reuse as need for some ...
stateNamesWithContact.forEach( function(stateName)
{
// regiester state many times as "some.parnet.child.contact"
$stateProvider
.state(stateName + ".contact", contact);
...
另一种方法是NOT使用Contact
作为子状态。将其移动到视图(哪些功能将支持模式)
多个命名视图
在根状态下定义一次-作为视图
如果Contact视图/控制器是静态的,我们可以将它们挂入超级根状态:
.state("root", {
views : {
"" : {
template: "<ui-view />" // here will be injected all children
}
"contact@" : {
... //setting of the Contact view / controller
}
}
}
现在,每个";"父";状态可以从中获利,而不会影响url
或name
(如果使用parent
设置,则无需具有"root.someParent")
.state("someState", {
parent: "root"
...
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 使用AngularJS中的UI路由器将状态重定向到默认子状态
- 在UI路由器中以抽象状态填充常见视图
- 如何在具有某些 UI 视图的状态中管理工厂单个请求数据
- 带有嵌套状态的Angular ui路由器和后退按钮
- 如何加载嵌套3个状态的UI路由器UI视图模板
- Angular+bootstrap ui,检查当前选项卡是否已处于活动状态
- ui路由器的惰性加载状态
- Angular JS/UI Router:为给定状态禁用指令
- AngularJS UI路由器未进入默认状态
- Angular UI路由器-检查父状态
- 状态更改期间角度UI路由器中的嵌套视图滞后
- angularjs-ui路由器父状态,参数加载在子状态之后
- Angularjs-ui路由器使用不同的参数进入相同的状态
- AngularJS ui路由器状态结构
- Angularjs:ui路由嵌套状态下的绑定不起作用
- 如何将值与$scope绑定,以从定义状态ui路由器的控制器中使用ng模型进行查看
- 防止命中子状态 ui 路由器
- 从服务器加载 html 和控制器并创建动态状态 UI - 路由器
- 如何在vue.js中观察状态/UI的变化