考虑下面的路由配置:如何刷新路由的解决数据
const routes: Routes = [
{
path: '',
component: AppComponent,
resolve: {
app: AppResolver
},
children: [
{
path: 'user/:uid',
resolve: {
user: UserResolver
},
children: [
{
path: '',
component: ViewUserComponent
},
{
path: 'edit',
component: EditUserComponent
}
]
}
]
}
];
数据由UserResolver
路线/user/:uid
的任何子女检索的用户。 使用此数据,用户配置文件可通过导航至/user/:uid
进行查看,然后通过导航至/user/:uid/edit
进行编辑。 编辑成功后,将会有人重定向到用户的已更新的配置文件(/user/:uid
)。
但是,视图和编辑页面都是已解析路径的子项,解析器在从一个导航到另一个导航时不会被触发。
因此,从编辑组件导航回视图组件时,显示的数据仍然是旧的,未更新的。
会有什么办法来解决已解决的user
数据强制解析器从服务器再次获取它吗?或者有没有其他方法可以实现这种结果?
app
数据保持不变,我们不应该重新加载它。
使用共享服务而不是父组件来处理数据。 –
@HarryNinh我可以,但这意味着复制订阅路由参数的代码并在每个子组件中调用服务,同时在共享服务中重新实现缓存策略。这似乎破坏了路由解析器的目的。 – vlaurin
很多关于这个问题的搜索。尽我所能地告诉解决这个问题的唯一方法是订阅一个事件并手动重新加载数据。理想情况下,你会构建应用程序。所以你可以通过代码重用来做到这一点,但即使这也是一个挑战,因为重新使用Resolve并不是微不足道的,因为获得路由器状态。我选择在Resolve中创建一个公用函数,可以重用并绕过解析函数本身。这是一个可以改进的明确领域。我看到很多人有这样的问题。 –