Aurelia在导航时没有'刷新'vm

时间:2017-01-22 17:25:30

标签: javascript aurelia

愉快的晚上!在我的Aurelia-App中,我使用viewModel通过navigationStrategy处理各种视图(读出路由参数并相应地设置视图)。

导航工作很顺利,但有一个问题:

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

似乎组件的生命周期钩子没有开始。有没有办法手动触发unbind()和detached()?或者是否有更好的方法来做事?

路由配置似乎有点奇怪。当我拿走moduleId应用程序崩溃时,当我拿走layoutViewModel时,Data没有绑定到视图。我现在的解决方法是分配一个空的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
    },
    {...}
  ]);
}

1 个答案:

答案 0 :(得分:4)

这是设计的。路由器将尝试重用现有的视图模型。

如果您需要为每个视图模型覆盖此设置,请在其上创建determineActivationStrategy()方法并返回activationStrategy.replace

import { activationStrategy } from 'aurelia-router';

export class SomeViewModel {
    // ...

    determineActivationStrategy() {
        return activationStrategy.replace;
    }

    // ...        
}

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