如何刷新路径的已解析数据

时间:2017-05-28 21:59:13

标签: angular typescript angular2-router

考虑以下路线配置:

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数据未更改,我们不应该重新加载它。

3 个答案:

答案 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)

通过上述方式,我可以呼叫解析器。但是它不会更改来自我的后端服务器的数据,所以我得到了一个解决方案,我再次成功地调用了我的服务方法,并从后端服务器获得了新的更改数据。