愉快的晚上!在我的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
},
{...}
]);
}
答案 0 :(得分:4)
这是设计的。路由器将尝试重用现有的视图模型。
如果您需要为每个视图模型覆盖此设置,请在其上创建determineActivationStrategy()
方法并返回activationStrategy.replace
:
import { activationStrategy } from 'aurelia-router';
export class SomeViewModel {
// ...
determineActivationStrategy() {
return activationStrategy.replace;
}
// ...
}
如果您需要为每个视图模型/路径覆盖此设置,请查看Marton Sagi's answer以获取类似问题。基本上,您的所有路线都需要定义activationStrategy: 'replace'
。