Angular 角度4:验证模型(不是表单)?

Angular 角度4:验证模型(不是表单)?,angular,validation,Angular,Validation,我正在构建一个Angular 4移动应用程序(带有Ionic 2)。共享服务包含用户可以编辑的Visit对象。应用程序的主页面如下所示: * Section 1: Customer Details (Complete) * Section 2: Property Info (Incomplete) * Section 3: Audit Results (Incomplete) [Submit Visit] 点击每个部分会将用户带到一个单独的页面,在那里他们可以编辑访问的该部分。用户可以保存每

我正在构建一个Angular 4移动应用程序(带有Ionic 2)。共享服务包含用户可以编辑的
Visit
对象。应用程序的主页面如下所示:

* Section 1: Customer Details (Complete)
* Section 2: Property Info (Incomplete)
* Section 3: Audit Results (Incomplete)

[Submit Visit]
点击每个部分会将用户带到一个单独的页面,在那里他们可以编辑
访问的该部分。用户可以保存每个部分,即使它无效或不完整。在主页上,当该部分中的所有必需信息都存在且有效时,每个部分将从“(不完整)”更改为“(完整)”。当所有部分都有效时,“提交访问”按钮将启用

以下是我试图实现的目标:

  • 在部分页面上,我希望像往常一样显示表单验证消息(使用
    FormGroup
    ),这样用户就可以很容易地看到哪些字段仍然需要注意

  • 这里是棘手的地方:在主页上,我需要一些方法来测试访问对象的每个部分的有效性。但是
    FormGroup
    验证表单,并且
    Visit
    对象(显然)不是表单。因此,我不知道如何重用
    FormGroups
    来直接验证
    Visit
    。(我猜这不是一个好主意,甚至可能不可能。)

我可以实现两次验证:作为一组
FormGroups
(验证每个部分的表单),以及作为一个自定义
VisitValidatorService
(直接验证
访问
对象)。然而,这显然不是理想的——我会复制代码,并且很难保持两组验证的同步

我想到的想法:

  • 当用户保存每个部分时,在
    访问
    对象上设置一个标志(例如,
    isSection1Valid=true
    )。这对我来说不起作用,因为当
    Visit
    首次加载到应用程序(通过JSON API)时,某些部分可能已经有效。因此,我仍然需要一些方法来检查每个部分的有效性,而不涉及实际的表单
  • 或者

  • 完全忘记使用
    FormGroup
    。构建my
    VisitValidatorService
    ,以便它可以验证原始
    Visit
    对象和表单模型。最后,连接my section控制器,以便在表单控件更改时调用此服务,并将任何返回的错误隐藏在公共
    errors
    对象中,然后可以在模板中显示该对象

    这似乎可行,但…复杂


  • 有更好的方法吗?或者我正在尝试做一些Angular 4无法轻松处理的事情?

    如果您不想做两次验证工作,那么一个选择是,单个表单将为您做这件事。 您的访问对象由三个不同的对象组成,它们都可以有一个附加属性“isValid”

    每次发布表单(表示表单有效)时,您都会将属性isValid更新为True。 然后,您的主页可以有自己的isValid标志,它是其他三个标志的产物。 为了使其工作,您可以从服务器获取最新的访问对象,以解析总体状态的新状态


    或者假设每次成功发布访问对象的每个子元素后isValid为true。

    如果您不想做两次验证工作,那么一个选项是单个表单将为您做这件事。 您的访问对象由三个不同的对象组成,它们都可以有一个附加属性“isValid”

    每次发布表单(表示表单有效)时,您都会将属性isValid更新为True。 然后,您的主页可以有自己的isValid标志,它是其他三个标志的产物。 为了使其工作,您可以从服务器获取最新的访问对象,以解析总体状态的新状态


    或者假设每次成功发布访问对象的每个子元素后,isValid为true。

    我的问题中已经提出(并拒绝)了此解决方案–请参见底部的要点1。我需要一种验证方法,(1)可以用来验证JavaScript对象或表单模型,(2)不依赖表单。我理解您的担忧。以下是可能的场景:1-用户第一次使用此页面,默认情况下所有部分都无效。2用户输入其中一个部分并进行编辑。当它们这样做时,您可以在服务器中独立地保存/持久化每个部分的状态。3用户再次返回此页面,然后从服务器获取每个部分的最新状态,以验证整个页面。此解决方案已在我的问题中提出(并被拒绝)——请参阅底部的要点1。我需要一种验证方法,(1)可以用来验证JavaScript对象或表单模型,(2)不依赖表单。我理解您的担忧。以下是可能的场景:1-用户第一次使用此页面,默认情况下所有部分都无效。2用户输入其中一个部分并进行编辑。当它们这样做时,您可以在服务器中独立地保存/持久化每个部分的状态。3用户再次返回此页面,然后从服务器获取每个部分的最新状态,以验证整个页面。