[英]Aurelia - disable reset on router-view
如果我更改路由器视图上的选项卡,则表单会一直重置,有没有一种方法可以防止这种情况发生(如果没有其他选择)
export class App {
configureRouter(config, router) {
config.title = "Aurelia";
config.map([
{ route: ["", "dashboard"], name: "dashboard", moduleId: "HTML/viewmodels/dashboard", nav: true, title: "Dashboard", settings: "icon-home" },
{ route: "addons", name: "addons", moduleId: "HTML/viewmodels/addons", nav: true, title: "Addons", settings: "icon-file" },
{ route: "error", name: "error", moduleId: "HTML/viewmodels/error", nav: true, title: "Error", settings: "icon-info-sign" }
]);
this.router = router;
console.log(router);
}
}
这是状态持续存在的问题。 最简单的解决方案是将状态存储在:
第一种方法:将其保存在父视图中。
例如,您可以在App
类内创建一个缓存:
export class App {
formData = {};
configureRouter(config, router) {
{ route: ["", "dashboard"], [..snip..] settings: { formData: this.formData, icon: 'icon-home' } }
}
}
在视图内,您可以执行以下操作:
activate(params, routeConfig) {
this.formData = routeConfig.settings.formData;
this.icon = routeConfig.settings.icon;
}
在HTML中,只需将其绑定到formData
:
<input type="text" value.bind="formData.text" />
这种假设是,整个App
围绕该形式旋转。 否则,将其存储在其中并没有多大意义。
无论如何,这是一种方法(我在列表中指出的第一个方法)。
另一种方式是:单例。
创建一个名为AppState
或类似内容的新类。
export class AppState {
formData = {};
}
然后,在您看来,您应该导入并注入它:
import { AppState } from './app-state';
export class YourView {
static inject = [AppState];
constructor(appState) {
this.appState = appState;
}
}
然后在您的HTML中,可以像这样绑定它:
<input type="text" value.bind="appState.formData.text" />
或第三种方式:静态类。
创建一个名为AppState
或类似内容的新类。
export class AppState {
static formData = {};
}
然后,在您看来,您应该导入并注入它:从'./app-state'导入{AppState};
export class YourView {
AppState = AppState;
}
然后在您的HTML中,可以像这样绑定它:
<input type="text" value.bind="AppState.formData.text" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.