【问题标题】:What is the best way to go for retaining user input data (form) when navigating thru a form wizard?通过表单向导导航时保留用户输入数据(表单)的最佳方法是什么?
【发布时间】:2016-09-22 19:26:57
【问题描述】:

我正在使用 Angular2:

我正在开发基于以下内容的表单向导:

1) 每个wizardstep(screen) 都与它自己的组件相关联,该组件呈现一个单独的子表单(),并附加了ngFormControl 绑定。

2) 应用路由器/路由通过表单向前移动

3) 用户输入数据在每个表单上单独验证 [*]

4) 用户输入数据将被持久化,即在用户确认后(在最后一个向导步骤中)被发送到 API。

[*] 我将来可能会有一些跨表单的验证规则,它们跨越多个页面,即表单。目前,这超出了我的问题的范围

我希望用户通过向导步骤来回导航将保留他的用户输入数据。 在 Angular2 中最好的方法是什么?

(到目前为止,我已经在网上搜索过,但没有成功找到关于我的问题的建议(特定于 angular2)。)

【问题讨论】:

    标签: forms navigation angular router wizard


    【解决方案1】:

    最好的方法是使用向导中涉及的所有组件通用的共享数据服务。

    export class SharedDataService {
      wizardData: any;
    }
    

    为此,您可以在使用所有这些的父组件的提供者中进行设置:

    @Component({
      (...)
      providers: [ SharedDataService ] // <----
    }
    

    您也可以在引导应用程序时指定它,但它会被所有应用程序共享:

    bootstrap(AppComponent, [ SharedDataService ]);
    

    有关详细信息,请参阅此文档:

    【讨论】:

    • 谢谢蒂埃里,好的,我明白了。传统的服务(单例模式)方法。我曾希望 Angular2 会带来一些新的结构。我阅读了有关 Angular2 canReuse 和 Angular 路由器的其他生命周期钩子的信息。我想我的解决方案应该使用这些挂钩来自动保存和恢复表单状态(使用 SharedDataService 方法)...?
    • 您好 Thiery,我想将我的表单(每个向导步骤:一个表单)放在 SharedDateService 上,以捕获每个表单的用户输入状态。我的向导允许用户在用户输入期间来回导航,即切换表单页面并仍然看到以前输入的用户输入数据。我的状态服务在每个表单上都有一个更改订阅,因此它在用户输入期间与每个表单状态保持同步。当我导航回表单时,我使用状态服务中先前保存的值初始化(新创建的)formModel。有没有更好的方法来保存/恢复表单数据值?
    猜你喜欢
    • 2021-06-11
    • 2021-06-09
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 1970-01-01
    相关资源
    最近更新 更多