gpt4 book ai didi

javascript - 导航时 Aurelia 不是 'refresh' vm

转载 作者:行者123 更新时间:2023-11-29 17:52:43 24 4
gpt4 key购买 nike

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

导航工作得很好,但是有一个问题:

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

似乎组件的生命周期 Hook 没有启动。有什么方法可以手动触发 unbind() 和 detached() 吗?还是一般情况下有更好的方法?

另外,Route-Configuration 看起来有点奇怪。当我拿走 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
},
{...}
]);
}

最佳答案

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

如果您需要覆盖每个 View 模型,则在其上创建 determineActivationStrategy() 方法并返回 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com