我正在问一个与这个问题类似的问题:UI 路由器条件 ui 视图?,但我的情况有点复杂,我似乎无法得到所提供的工作答案。
基本上,我有一个 url,可以用两种截然不同的方式呈现,具体取决于 url 指向的实体类型。
这是我目前正在尝试的
$stateProvider
.state('home', {
url : '/{id}',
resolve: {
entity: function($stateParams, RestService) {
return RestService.getEntity($stateParams.id);
}
},
template: 'Home Template <ui-view></ui-view>',
onEnter: function($state, entity) {
if (entity.Type == 'first') {
$state.transitionTo('home.first');
} else {
$state.transitionTo('home.second');
}
}
})
.state('home.first', {
url: '',
templateUrl: 'first.html',
controller: 'FirstController'
})
.state('home.second', {
url: '',
templateUrl: 'second.html',
controller: 'SecondController'
});
我设置了一个 Resolve 来从静态服务中获取实际实体。
一切似乎都在正常工作,直到我真正根据类型到达 TransitionTo 为止。
转换似乎有效,但解析重新触发并且 getEntity 由于 id 为空而失败。
我尝试将 id 发送到transitionTo 调用,但它仍然尝试进行第二次解析,这意味着从其余服务中获取实体两次。
似乎正在发生的事情是,在 onEnter 处理程序中,状态实际上尚未更改,因此当转换发生时,它认为它正在转换到一个全新的状态而不是子状态。这进一步得到证明,因为当我删除该实体时。从transitionTo中的状态名称来看,它认为当前状态是root,而不是home。这也阻止我使用“go”而不是“transitionTo”。
有任何想法吗?