我有一个这样的嵌套状态结构:
$stateProvider
.state('main', {
url: '',
abstract: true,
templateUrl: ...
controller: mainController,
resolve: {
Resolve1: ...
Resolve2: ...
}
})
.state('main.state1', {
url: '^/state1/:id/',
templateUrl: ....
controller: state1Controller,
resolve: {
Resolve11: ...
Resolve22: ...
},
})
.state('main.state2', {
....
从我所看到的情况来看,当您处于州main.state1
并且使用另一个id
参数导航到相同的状态时,main.state1
的模板会正常呈现,但是main
(父级)在状态更改之前呈现(我猜它不等待main.state1
的数据解析)。这导致视图使用错误的数据呈现(更具体地说,我用于生成链接的状态参数是错误的)。
我的mainController
注入了$stateParams
和$state
,这就是我从中获取数据的地方。
之前有没有人注意到这一点?这是设计还是错误?
有没有办法用最新数据更新父视图?
但是,我希望ui-router能够等待所有数据分辨率,直到它开始渲染视图(甚至是父视图)。我不知道我在这里遗漏了什么,但到目前为止,这是我对这个问题的理解......
更新
我现在看到视图渲染(带插值)中涉及的函数被多次调用,首先使用旧值,然后使用新值。但是我在屏幕上看到的最终结果是使用了我第一次进入'main。*'状态时使用的初始数据。这太奇怪了。
更新2:
我发现我的链接只在使用ui-sref时才更新(注意我在状态href中使用了参数,例如ui-sref =“main.state1({id:{{getId()}} })“)。当切换到ng-href时,一切都按预期工作。
我不知道为什么,但这解决了问题。
奇怪的是,ui-sref已被评估,但链接未更新。
去图......
更新3:
这种解决方案反过来又引发了其他问题。然后第一次点击重新加载应用程序......所以这不是最好的解决方案......
答案 0 :(得分:1)
"解决方案"是将ng-click
与$state.go()
一起使用,而不是使用链接。
这似乎是ui-router中的一个错误。
答案 1 :(得分:0)