在Aurelia重新加载当前页面

Ser*_*eit 16 aurelia aurelia-navigation aurelia-router

我有一个Aurelia应用程序,用户可以选择他们当前正在"工作"的公司.应用程序中的每个页面都取决于当前选定的公司,用户可以从下拉菜单中选择新公司.下拉列表是导航栏上的一个组件.

我想要的是让该组件重新加载change.delegate处理程序上的当前页面而不重新启动应用程序.所以设置window.location.href是不可能的.

有没有办法迫使aurelia Router重新加载当前路线/页面?

另一种方法是使用EventAggregator信号在整个应用程序公司的变化,但这需要或者订阅该事件的每一页上或具有订阅了该事件的一个基类的每一页继承,但这些更多地参与选择.

Tec*_*ium 10

虽然没有得到官方的支持,但在相关的GitHub问题中有各种各样的黑客建议要求这个功能.

我开始工作的那个不涉及更新aurelia的源代码,也没有在路由中添加多余的数据就是设置activationStrategy我的所有路由invokeLifecycle而不是默认路由,如下所示:

import { activationStrategy } from 'aurelia-router';

export class App {

  configureRouter(config, router) {
    config.map([
      { 
        route: ['', 'home'],
        name: 'home',
        moduleId: 'home/index',
        activationStrategy: activationStrategy.invokeLifecycle
      },
      {
        route: 'users',
        name: 'users',
        moduleId: 'users/index',
        nav: true,
        activationStrategy: activationStrategy.invokeLifecycle
      },
      ... etc ...
    ]);
  }

}
Run Code Online (Sandbox Code Playgroud)

这使得路由的activate()方法将在重新加载视图模型时按预期运行.然后,在启动重新加载的代码中,我执行以下操作:

this.router.navigateToRoute(
  this.router.currentInstruction.config.name,
  this.router.currentInstruction.params,
  { replace: true }
);
Run Code Online (Sandbox Code Playgroud)

  • 最好的回答谢谢!如果你能让我知道我可以从'aurelia-router'中导入{activationStrategy},我本可以节省几分钟 (3认同)

Syl*_*ain 7

这不能回答您确切的问题,即如何强制重新加载当前视图,但您是否考虑过将当前公司标识符添加到您的路径中?这将解决您的问题并使您的路线可收藏:ie:/#/company1/view1and /#/company2/view1.当您在下拉列表中更改公司时,您将router.navigate()使用新路由进行调用,并且将加载/刷新新视图.

为了回答你的确切问题,我测试了这些router.navigate选项:router.navigate('myroute', {replace:true, trigger:true})如果右视图已经加载,它们都不会强制重新加载视图.通过附加?ramdomNumber到您的路径名称,您可以强制重新激活视图.