【问题标题】:Getting multiple interpolated values during select statement change - Angular & ngFor在选择语句更改期间获取多个插值 - Angular & ngFor
【发布时间】:2019-10-30 15:00:11
【问题描述】:

我有一个表单,要求用户选择项目标题。除了该项目标题(选中时),我还想获取与该选择相关的另外两个值 - 然后,使用这些值添加到表单数据,我最终将保存到我的数据库中。正在循环的选择列表选项包含大量数据,而不仅仅是项目标题。进行此选择时,我想使用其中的一些数据。

在 HTML 中,我循环遍历“项目”并要求用户选择一个。很容易。当他们选择此选项时,他们会自动使用 value 属性填充“formControlName”。本质上,我还想用这个选择值填充更多的“formControlName”——有点像在这个选择中使用多个 VALUE 属性。我知道我可以在 value 属性中插入更多内容,但它会重载“formControlName”

我想获取此“项目”选择的其他两个属性 - projectManager._id 和 projectManager.email - 我想在保存时将这些值与表单一起保存


----- HTML -----

<!-- PROJECT -->
        <div class="form-group col-sm-4">
          <label>Project</label>
          <select class="custom-select form-control" formControlName="project">
            <option *ngFor="let project of projects" value="{{project?._id}}">
              {{ project.projectTitle | titlecase }}
            </option>
          </select>
        </div>

----- TS ------

// INITIATE THE FORM
    this.requestForm = this.fb.group({
      userId: this.currentUser.id,
      userEmail: this.currentUser.email,
      projectManagerId: '',
      projectManagerEmail: '',
      department: '',
      project: '',
      episode: '',
      requestItems: this.fb.array([
        this.fb.group({
          timecodeIn: '',
          timecodeOut: '',
          reason: '',
          line: '',
          note: ''
        })
      ])
    });

【问题讨论】:

  • 对不起,你有什么问题?
  • 当我在选择列表中选择项目时,我想访问其他两个属性(project.projectManager._id 和 project.projectManager.email)。当用户进行选择时,我很难弄清楚如何获取其他两个值?最终,我想将这些值添加到其他 formControlName 属性。谢谢!

标签: angular


【解决方案1】:

在这些情况下,我通常会在进行选择时在 valueChanges observable 中获取这些属性,因为您不想弄乱项目表单控件的值。那将是:

this.requestForm.get('project').valueChanges
  .subscribe((projectId: number) => {
    const project = this.projects.find((project) => project.id === projectId);
    * do whatever else with the values *
  });

这样,更改与选择表单值的更改相关联,这本质上是您想要的反应式表单。

【讨论】:

  • 这很棒,不知道这个。我遇到了一个小问题,当我尝试在 find 方法中使用值 PROJECT 时,我得到了选择列表中的所有值,而不是所选列表项的信息。试图控制台记录一堆以缩小选择范围但失败了。有没有办法只获取选择的信息?
  • 好吧,我只是假设了类变量的名称,因为我在你的代码 sn-p 中看不到它们。参数 projectId 将是在 select 输入中选择的值,然后我们遍历整个项目数组(我猜是 this.projects?)并找到具有相同 ID 的项目。试试这个,根据 HTML 代码:const project = this.projects.find((project) =&gt; project._id === projectId);,如果有意义的话,项目常量应该是所选项目的文字对象。
  • 啊,是的。知道了。非常感谢大卫。令人困惑,但现在了解这里的工作流程。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 2016-05-10
  • 2020-05-31
  • 1970-01-01
相关资源
最近更新 更多