祝大家晚上好!在我的 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/