Angularjs ui路由器在状态更改之前呈现模板
我有一个嵌套的状态结构,如下所示:Angularjs ui路由器在状态更改之前呈现模板,angularjs,angular-ui-router,Angularjs,Angular Ui Router,我有一个嵌套的状态结构,如下所示: $stateProvider .state('main', { url: '', abstract: true, templateUrl: ... controller: mainController, resolve: { Resolve1: ... Resol
$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', {
....
从我看到的情况来看,当您处于statemain.state1
并且使用另一个id
参数导航到相同的状态时,main.state1
的模板呈现良好,但是main
的模板(父级)在状态更改之前呈现(我猜它不会等待main.state1
)的数据解析。这会导致视图使用错误的数据呈现(更具体地说,我用于生成链接的状态参数是错误的)
我的mainController
将$stateParams
和$state
注入它,这就是我获取数据的地方
以前有人注意到吗?这是设计的还是一个bug
有没有办法用最新数据更新父视图
但是,我希望ui路由器等待所有数据解析,直到它开始呈现视图(甚至父视图)。我不知道我是否遗漏了一些内容,但这是我到目前为止对问题的理解
更新:
现在我看到视图渲染(带插值)中涉及的函数被多次调用,先是使用旧值,然后是新值。但我在屏幕上看到的最终结果是使用我第一次进入“main.*”状态时使用的初始数据。这太奇怪了
更新2:
我发现我的链接只有在使用ui-sref时才更新(请注意,我使用的是状态href中的参数,例如ui-sref=“main.state1({id:{{getId()}}}}])。当切换到ng-href时,一切正常
我不知道为什么,但这解决了问题
奇怪的是,对ui sref进行了评估,但没有更新链接
想想看
更新3:
此解决方案反过来会导致其他问题。然后,第一次单击会重新加载应用程序…因此,这不是最佳解决方案…ui路由器转换“通过”父状态到子状态。这意味着将触发main,然后是main.state1。我自己也遇到过这种情况,在那里我得到了重复的侦听器和HTML DOM元素-main实际上与main.state1同时运行。这种行为是通过设计实现的,您唯一的选择就是围绕它进行设计。解决方案was将使用ng单击$state.go()
,而不是链接
这似乎是ui路由器中的一个错误