Angular2获取动态创建的输入值

Posted

技术标签:

【中文标题】Angular2获取动态创建的输入值【英文标题】:Angular2 get values of dynamically created inputs 【发布时间】:2017-03-24 20:33:44 【问题描述】:

我有这个输入是从列表column 动态创建的,现在我需要在某些方法发生时获取输入的所有值(想象getAllValues()

      <div *ngFor="let cell of column; let i = index;">
              <!-- Material design input-->
              <md-input type="cell.type" 
                 value="getInputValue(cell)" 
                 [placeholder]="cell.label">
              </md-input>
      </div>

获取所有生成的输入值的 angular2 方式是什么?

【问题讨论】:

可以使用 ViewChildren,如果它是表单的一部分,它们可以以编程方式(反应式)或魔法(模板驱动)附加到表单中。 @silentsod 最佳实践是什么?反应还是魔法? 模板驱动或多或少符合 Angular 1 的做事方式,反应式在代码方面更重,但使单元测试更容易。两者都不是最佳实践,就学习和实际代码行而言,模板驱动可能是一种开销较低的方法。如果它在表单之外,那么您可能需要执行 ViewChildren 查询来获取它们。 @siletsod 是的,它们超出了形式,如何使用 ViewChildren 获取所有值是否可以根据 let i = index 获取值? 如果我有时间,我会看看如何制作一个演示 plunker。同时,希望 cmets 能够帮助其他潜在响应者制定适合您使用的解决方案。 【参考方案1】:

最简单的方法是使用 ngForm

<form #myForm="ngForm">
      <div *ngFor="let cell of column; let i = index;">
          <md-input [type]="cell.type" 
             [name]="cell.name"      <!-- Note the 'name' has to be set -->
             [ngModel]="cell.value"
             [placeholder]="cell.label"></md-input>
      </div>
      <a (click)="getAllValues(myForm)">print values</a>
</form>

然后您将可以访问 getAllValues() 函数中的 myForm.form.value 对象。 公众号:https://plnkr.co/edit/84mzcNJliMmvszPq3xMm?p=preview

【讨论】:

【参考方案2】:

我所做的是:

              <md-input #input  // NOTICE #input
                          type="cell.type"
                          value="getInputValue(cell) || '--'"
                          [placeholder]="cell.label"></md-input>

在组件类中:

export class MyComponent 

    @ViewChildren('input') inputs;


    public updateData(): void 
        console.log(this.inputs) //this will give access to id and values (explore it on google chromes console)
        console.log(this.inputs.toArray().map(x => x.value)) // this gives access to values
    

【讨论】:

在动态生成输入(例如使用 ngFor 语句)时,不能以这种方式使用模板变量

以上是关于Angular2获取动态创建的输入值的主要内容,如果未能解决你的问题,请参考以下文章

使用 ng-content 动态创建 angular2 组件

使用 ng-content 动态创建 angular2 组件

如何从数据库中获取值以为循环形式的输入创建动态名称?

Angular2动态输入字段在输入更改时失去焦点

如何在 jQuery 中获取动态创建的输入的单选值

使用Jquery获取动态创建的元素的值