【发布时间】:2014-09-22 17:56:56
【问题描述】:
我在问一个与这个问题类似的问题:UI Router conditional ui views?,但我的情况有点复杂,我似乎无法得到提供的答案。
基本上,我有一个可以以两种截然不同的方式呈现的 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。
有什么想法吗?
【问题讨论】:
-
可能需要控制器来初始化
id
标签: angularjs angular-ui angular-ui-router