考虑以下路线配置:
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
数据未更改,我们不应该重新加载它。
答案 0 :(得分:12)
我已经测试了解决方案'runGuardsAndResolvers',它适用于我的用例,在每个子页面更改时调用解析器。
只是添加此选项,您希望以这种方式行事的部分路线。
export const ROUTES: any = [
{
path: 'project/:name',
runGuardsAndResolvers: "always",
component: ProjectComponent,
resolve: { project: ProjectResolver },
children: [
...
答案 1 :(得分:5)
您可以在路线配置中使用一个名为' runGuardsAndResolvers'这会影响解析器运行的时间。在这种情况下,您可能希望将其设置为“始终'”。这意味着解析器将在该路由的子路由发生更改时运行。有关详细信息,请参阅the route documentation。
答案 2 :(得分:0)
通过上述方式,我可以呼叫解析器。但是它不会更改来自我的后端服务器的数据,所以我得到了一个解决方案,我再次成功地调用了我的服务方法,并从后端服务器获得了新的更改数据。