javascript - Aurelia 导航时没有 'refresh' vm

标签 javascript aurelia

祝大家晚上好!在我的 Aurelia-App 中,我使用 viewModel 通过 navigationStrategy 处理各种 View (读出路线参数并相应地设置 View )。

导航基本上运行良好,但有一个问题:

当我继续在基于同一 viewModel 的路线之间导航时,viewModel 不会“刷新”。仅当首先导航到具有不同 viewModel 的不同路线,然后返回预期路线时,内容才会按预期显示。

组件的生命周期钩子(Hook)似乎没有启动。有没有办法手动触发 unbind() 和 detached() ?或者有更好的方法来做一般事情吗?

此外,路由配置似乎有点奇怪。当我拿走 moduleId 时,应用程序崩溃,当我拿走layoutViewModel 时,数据未绑定(bind)到 View 。我现在的解决方法是分配一个空的 viewModel + 一个空的模板。我使用这个错误吗?

非常感谢!

configureRouter(config, Router) {

  var getModelStrat = (instruction) => {
    instruction.config.layoutView = "pages/templates/"+instruction.params.model+".html"
  }

  config.addAuthorizeStep(AuthorizeStep);
  config.title = 'Aurelia';
  config.map([
    {
      route: 'detail/:model/:id?',
      name: 'detail',
      moduleId: 'pages/empty',
      layoutViewModel: 'pages/detail',
      auth: true,
      navigationStrategy: getModelStrat
    },
    {...}
  ]);
}

最佳答案

这是设计使然。 Router 将尝试重用现有的 View 模型。

如果您需要重写此每个 View 模型,请在其上创建 defineActivationStrategy() 方法并返回 activationStrategy.replace:

import { activationStrategy } from 'aurelia-router';

export class SomeViewModel {
    // ...

    determineActivationStrategy() {
        return activationStrategy.replace;
    }

    // ...        
}

如果您需要为每个 View 模型/路线覆盖此设置,请查看 Marton Sagi's answer对于类似的问题。基本上,您的所有路由都需要定义 activationStrategy: 'replace'

关于javascript - Aurelia 导航时没有 'refresh' vm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41793946/

相关文章:

javascript - 如何在angularjs中获取修改后的对象

javascript - Aurelia 验证 - 在 aurelia-validation@0.9.2 中替换 isValid

javascript - 使用aurelia上传图像到asp.net core后端

javascript - 如何确保浏览器用户看到 img 标签?

javascript - 用于提取 URL 部分的正则表达式?

javascript - jQuery DataTables 错误 - TypeError : Cannot read property 'fnInit' of undefined

Aurelia:如何在子路线之间导航

javascript - 如何允许 HTML/Javascript 中的自定义控件上的选项卡 (Aurelia)

aurelia - aurelia 中的自定义属性不起作用?

javascript - 无法在组件内部使用 [routerLink]