我有一个名为“index”的状态,根据页面上的ui视图,显示不同的信息,具有不同的templateUrl,并共享相同的URL:
$stateProvider.state('index', {
url: '/',
views: {
'all@': {
templateUrl: '/templates/partials/all/index',
controller: function(){
console.log('main');
}
},
'@': {
templateUrl: '/templates/partials/home/index',
controller: Controllers.Index,
controllerAs: 'academia',
resolve: {
templates: Preload.go(),
academia: ['Info', (Academia: Academia.Services.Info) => {
return Academia.get();
}],
plans: ['Planner', (Planner: ngPlanner.Planner) => {
return Planner.init();
}]
}
}
}
});当使用<div ui-view></div>加载页面时,它按预期工作(与“@”规则匹配)。但是,当页面加载了<div ui-view="all"></div>时,就没有了。
显示问题http://plnkr.co/edit/a2SWbB?p=preview的柱塞
未命名的@的解析不应该干扰all@视图。当前的解析被拒绝,因为它不属于当前视图(因为加载页面时没有未命名的视图)。是虫子,还是我做错了什么?
发布于 2014-11-09 08:18:16
现在,UI-Router实现是由状态管理驱动的。尽管事实是,有一些声音/要求来分割视图的决心(嗯,不是父视图还是子视图--但下面将讨论这一点).我想说的是,上面描述的Q&A中的当前行为只是正确的。
第一,上述问题的问题是甚麽?通常有两个或多个同级视图,它们有自己的解决方案定义:
views: {
'view1': {
....
resolve : { // could fail
}
},
'view2': {
...
resolve: { // could fail as well
...什么是状态?
状态是一组设置,表示状态。(听起来像http://en.wikipedia.org/wiki/Tautology_%28logic%29,但我是认真的)。所有的设置都是关于状态定义的,关于一种特定的状态。
我们可以使用更多的视图来表示它(例如标题和内容)。
我们可以使用一些解析语句(对于所有的同级视图,对其中的一些视图)来支持这些视图。
我们仍然只有一个状态。
就是这样。这不是全部就是什么都没有。状态是一个、一个设置集群,所有这些设置都必须工作/解决--否则整个状态都失败了。
另一个故事:亲子
还有一些要求,允许父视图在解决了其所有内容后呈现。为什么?当前,如果我们直接导航到child状态,则必须在启动状态之前解析所有/两个解析,然后呈现视图。
这是可以改进的。讲得通。据我所知,这是计划在以后的版本(我发誓,我已经看到了UI-路由器团队成员-但找不到它的评论之一)。
情况就不一样了。因为1)我们可以先转到父(列表视图)。然后2)选择子(细节)。在这种情况下,可能真的会发生列表起作用,细节失败的情况。
所以直接去找孩子应该是父母,下一个孩子失败了.但这与上面描述的兄弟姐妹不同。
建议:
我的建议是,只保留resolve的东西,这是必不可少的,一个国家绝对必须的。将其余的移动到注入服务的控制器中。这是我的建议和我的方式..。
https://stackoverflow.com/questions/26824737
复制相似问题