在Aurelia中重新加载当前页面

在Aurelia中重新加载当前页面,aurelia,Aurelia,我有一个应用程序,用户可以选择他们目前工作的公司。应用程序中的每个页面都取决于当前选择的公司,用户可以从下拉菜单中选择新公司。下拉列表是位于导航栏上的组件 我想要的是让该组件在change.delegate处理程序上重新加载当前页面,而不重新启动应用程序。因此,设置window.location.href是不可能的 有没有办法强制aurelia路由器重新加载当前路由/页面 另一种方法是使用EventAggregator在整个应用程序中发出公司变更的信号,但这需要在每个页面上订阅该事件,或者让每个

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

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

有没有办法强制aurelia路由器重新加载当前路由/页面


另一种方法是使用EventAggregator在整个应用程序中发出公司变更的信号,但这需要在每个页面上订阅该事件,或者让每个页面从订阅该事件的基类继承,但是这些都是更复杂的选项。

这并不能回答您的确切问题,即如何强制重新加载当前视图,但是您是否考虑过将当前公司标识符添加到您的路线中?这将解决您的问题,并使您的路由成为可书签的:即://company1/view1和//company2/view1。当您在下拉列表中更改公司时,您将调用router.navigate(路由器)。使用新路由导航,新视图将被加载/刷新


为了回答您的确切问题,我测试了router.navigate选项:router.navigate'myroute',{replace:true,trigger:true},如果已经加载了正确的视图,它们都不会强制重新加载视图。通过在路由名称后添加?ramdomNumber,可以强制重新激活视图。

以下是刷新页面的简单解决方案: 在aurelia-history-browser.js中,添加了一个签入updateHash,如果新的_href等于旧的,则从缓存而不是服务器重新加载页面

然后,要刷新页面,只需使用现有选项:

router.navigateToRoute('watch', {}, { replace: true, trigger: true });
更新后的代码复制如下:

function updateHash(location, fragment, replace) {
    if (replace) {
      var _href = location.href.replace(/(javascript:|#).*$/, '') + '#' + fragment;
      if (_href == location.href)
        location.reload(false);
      else
        location.replace(_href);
    } else {
      location.hash = '#' + fragment;
    }
  }

虽然没有官方的支持,但是有很多黑客建议需要这个功能

我要做的一件事不涉及更新aurelia的源代码,也不向路由添加多余的数据,就是将所有路由上的设置为invokeLifecycle,而不是默认值,如下所示:

从“aurelia路由器”导入{activationStrategy}; 导出类应用程序{ 配置路由器配置,路由器{ config.map[ { 路线:[,'家'], 姓名:'家', moduleId:'主/索引', activationStrategy:activationStrategy.invokeLifecycle }, { 路由:“用户”, 名称:'用户', moduleId:'用户/索引', 导航:是的, activationStrategy:activationStrategy.invokeLifecycle }, 等 ]; } } 这样,当视图模型重新加载时,路由的激活方法将按预期运行。然后,在启动重新加载的代码中,我执行以下操作:

这是一个路由器 this.router.currentInstruction.config.name, this.router.currentInstruction.params, {replace:true} ; 更好的答案是:

this.router.navigateToRoute(
  this.router.currentInstruction.config.name,
  {
    ...this.router.currentInstruction.params,
    reload: Number(this.router.currentInstruction.queryParams.reload || 0) + 1,
  },
  { trigger: true },
);
navigateToRoute采用3个参数:

路由名称:从当前指令获取 路由参数:从当前指令获取并添加增量重载以更改路由;使路由器实际导航的最简单方法 选项:trigger:true选项强制激活此特定路由指令上的activationStrategy:invokeLifecycle,而无需在viewModel或routeConfig中为正常路由设置此选项。
实际上,我曾尝试将公司名称附加到routes/dashboard/company1,而不是使用随机数,但这不起作用。。。现在我意识到这是因为我需要定义本可以使用的route dashboard/:company:?在/dashboard?company1中没有。有趣。。。我要试一试!你是我的英雄,这太完美了!最好的回答谢谢!如果你让我知道我可以从“aurelia-router”导入{activationStrategy}的话,我只会节省几分钟的时间,但我不得不用这个.router.currentInstruction.queryParams替换这个.router.currentInstruction.params。这看起来是最优雅的解决方案,但我没有运气让它工作。重载查询参数正确地附加到URL,但触发器似乎从未发生过。