node.js - Angular 形式组 patchValue 将值包裹在大括号中

标签 node.js angular typescript ecmascript-6 single-page-application

我正在使用表单生成器构建响应式(Reactive)表单。表单数据需要动态更新。为了实现这一目标,我创建了一个函数,该函数迭代对象中的键并使用匹配的键名称修补表单值。这在大多数情况下都有效,但是,生成的表单值在值周围有额外的大括号 [] 。我可能在这里遗漏了一些明显的东西。

下面是迭代对象键并修补键名称与表单控件名称匹配的每个值的函数:

  /**
   *
   * @param {object} formGroup form group to update
   * @param {object} formValues the form control name as the key and the value to patch
   */
  public patchMultipleValues(formGroup, formValues) {
    for (let key in formValues) {
      let keyToPatch = key;
      let valueToPatch = formValues[key];

      // Patch value
      formGroup.patchValue({ [keyToPatch]: [valueToPatch] });
    }
  }

以下是示例测试数据和测试表单组:

  testData = {
    'Title': 'Example title',
    'Description': 'This is an example description for testing',
    'Items': ['A', 'B', 'C', 1, 2, 3]
  }

  this.testForm = this.fb.group({
    Title: [null],
    Description: [null],
    Items: [null]
  });

这是对该函数的调用:

this.patchMultipleValues(this.testForm, this.testData);

这是生成的表单值,每个值都用额外的大括号括起来。标题和描述应该只是字符串,项目应该只是一个数组。

formGroup.value {"Title":["Example title"],"Description":["This is an example description for testing"],"Items":[["A","B","C",1,2,3]]}

问题:如何更新代码以便修补正确的值?我尝试从 this.fb.group 定义中删除大括号,但这无法正常工作。

最佳答案

您应该像这样更改您的 patchMultipleValues (注意 valueToPatch 周围没有 []):

/**
   *
   * @param {object} formGroup form group to update
   * @param {object} formValues the form control name as the key and the value to patch
   */
  public patchMultipleValues(formGroup, formValues) {
    for (let key in formValues) {
      let keyToPatch = key;
      let valueToPatch = formValues[key];

      // Patch value
      formGroup.patchValue({ [keyToPatch]: valueToPatch });
    }
  }

关于node.js - Angular 形式组 patchValue 将值包裹在大括号中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56973704/

相关文章:

node.js - 从 firebase 下载文件并上传到 stripe 进行身份验证

javascript - 如何在点击时重定向到 li

angular - 'ng' 不是内部或外部命令,也不是可运行的程序 或批处理文件

javascript - 如何在同一声明中使用具有必需属性的多种类型?

angular - 如何从其他组件访问 app.component 的方法?

node.js - 如何在 Linux 上安装 node.js 和 npm?

javascript - 如何在 Angular 2/4+ 和 Socket.io 中关闭 websocket

javascript - Heroku 部署错误 : Cannot get Node App running after Deploy : Cannot find module '/app/web.js'

angular - HttpHeaders.applyUpdate 'Cannot read property ' 长度'未定义' Angular 通用服务器

javascript - 如何在 typescript 中获取异步函数的返回类型?