我有一个名为'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@
视图。当前解析被拒绝,因为它不属于当前视图(因为在加载页面时没有未命名的视图)。这是一个错误,还是我做错了什么?
答案 0 :(得分:0)
目前,UI-Router
实施由州管理层推动。尽管如此,有一些声音/要求可以分割视图的解析(好吧,不是父视图与子视图 - 但这将在下面讨论) ...我会说,上述Q&amp; A中的当前行为只是正确。
首先,上述问题是什么问题?通常,有两个或更多兄弟视图,具有自己的解析定义:
views: {
'view1': {
....
resolve : { // could fail
}
},
'view2': {
...
resolve: { // could fail as well
...
什么是州?
状态是一组设置,代表状态。 (听起来像self proving statement,但我很认真)。所有设置都是关于状态定义,关于一个特定状态。
我们可以使用更多视图来表示(例如标题和内容)
我们可以使用一些解析语句(对于所有兄弟视图,对于其中一些)来支持这些视图。
我们仍然只有 ONE 州。
就是这样。这是全有或全无。状态是一组,一组设置,所有这些都必须工作/解决 - 或者整个状态都失败。
另一个故事:父母 - 孩子
还有一些要求让父视图在解决所有内容后进行渲染。为什么?目前,如果我们直接导航到child
状态,则必须在启动状态之前解析所有/两个解析,然后呈现视图。
这可以真正改善。合理。据我所知,计划在以后的版本中发生(我会发誓我已经在UI-Router团队成员的一条评论中看到了 - 但是找不到它)。
情况不同。因为1)我们可以先去父母(列表视图)。然后2)选择孩子(细节)。在这种情况下,列表工作正常,细节失败。
所以直接去看孩子应该让父母,下一次失败的孩子...但这是与上述兄弟姐妹不同的故事。
建议:
我的建议是,在resolve
中只保留必要的东西,绝对必须为一个州。将其余部分移动到Controllers注入的服务中。这是我的建议和我的方式......