除非在微不足道的情况下,否则无法让 ui-router 的片段排列起来
cannot get the pieces of ui-router to line up except in trivial cases
我希望能够将 ui-路由命令附加到任何模块的配置函数,并获得一个统一的状态层次结构,该层次结构按状态命名组织:根、root.sub、sub.detail,等等。但我似乎只能在附加到主应用程序模块的配置中定义路由,而不能在任何子模块中定义路由,并且...
虽然我已经尝试了很多(全部?)变体,但我对以下内容的预期效果并不满意,假设我的索引包括:<div ui-view="shell"></div>
.
var app = angular.module('shell.module', ['sub.module'])
app.config(function($stateProvider) {
$stateProvider
.state('shell', {
views: {
url: '/',
template: '<div ui-view="area"></div>'
}
})
var sub = angular.module('sub.module',[]);
sub.config(function($stateProvider) {
$stateProvider
.state('shell.sub', {
views: {
url: '/sub',
template: 'satisfying content!'
}
})
});
似乎是真的,如果未命名子状态,则子状态模板将替换索引中的根状态内容。但如果两者都被命名,则根状态包含:
<div ui-view="shell" class="ng-scope>
<div ui-view="sub" class="ng-scope"></div>
</div>
我相信这意味着第一次替换成功,第二次(内部)替换有效,但第二次替换不被解释为 angular 语法,只是文本(或 html)。
对我来说,综合经验意味着 ui-router 的规则没有定义,除了最微不足道的情况,因为我似乎已经读过 'everything' 了,虽然没有写的真好。
您的状态定义不正确。
视图对象应包含视图名称作为键和 controller/template 等作为值。
此外,默认情况下,子状态会将其内容粘贴到其父状态的未命名视图中。您没有任何未命名的视图,因此您必须为视图对象提供不同的语法。
我认为您的代码应该如下所示:
app.config(function($stateProvider) {
$stateProvider
.state('shell', {
url: '/',
views: {
'' {
template: '<div ui-view="area"></div>'
}
}
})
var sub = angular.module('sub.module',[]);
sub.config(function($stateProvider) {
$stateProvider
.state('shell.sub', {
url: 'sub/',
views: {
'area@shell': {
template: 'satisfying content!'
}
}
})
});
此外,您的 url 位置错误且创建不正确。子视图 url 是通过将其父视图的 url 添加到它们之前创建的。所以在你的情况下 "shell.sub" url 本来是 //sub
这是错误的。我修好了。
我认为您还有更多文档(重新)阅读要做:)
我希望能够将 ui-路由命令附加到任何模块的配置函数,并获得一个统一的状态层次结构,该层次结构按状态命名组织:根、root.sub、sub.detail,等等。但我似乎只能在附加到主应用程序模块的配置中定义路由,而不能在任何子模块中定义路由,并且...
虽然我已经尝试了很多(全部?)变体,但我对以下内容的预期效果并不满意,假设我的索引包括:<div ui-view="shell"></div>
.
var app = angular.module('shell.module', ['sub.module'])
app.config(function($stateProvider) {
$stateProvider
.state('shell', {
views: {
url: '/',
template: '<div ui-view="area"></div>'
}
})
var sub = angular.module('sub.module',[]);
sub.config(function($stateProvider) {
$stateProvider
.state('shell.sub', {
views: {
url: '/sub',
template: 'satisfying content!'
}
})
});
似乎是真的,如果未命名子状态,则子状态模板将替换索引中的根状态内容。但如果两者都被命名,则根状态包含:
<div ui-view="shell" class="ng-scope>
<div ui-view="sub" class="ng-scope"></div>
</div>
我相信这意味着第一次替换成功,第二次(内部)替换有效,但第二次替换不被解释为 angular 语法,只是文本(或 html)。
对我来说,综合经验意味着 ui-router 的规则没有定义,除了最微不足道的情况,因为我似乎已经读过 'everything' 了,虽然没有写的真好。
您的状态定义不正确。
视图对象应包含视图名称作为键和 controller/template 等作为值。
此外,默认情况下,子状态会将其内容粘贴到其父状态的未命名视图中。您没有任何未命名的视图,因此您必须为视图对象提供不同的语法。
我认为您的代码应该如下所示:
app.config(function($stateProvider) {
$stateProvider
.state('shell', {
url: '/',
views: {
'' {
template: '<div ui-view="area"></div>'
}
}
})
var sub = angular.module('sub.module',[]);
sub.config(function($stateProvider) {
$stateProvider
.state('shell.sub', {
url: 'sub/',
views: {
'area@shell': {
template: 'satisfying content!'
}
}
})
});
此外,您的 url 位置错误且创建不正确。子视图 url 是通过将其父视图的 url 添加到它们之前创建的。所以在你的情况下 "shell.sub" url 本来是 //sub
这是错误的。我修好了。
我认为您还有更多文档(重新)阅读要做:)