【问题标题】:How can I pass in an <input> element to ng-for, which is bound to some ng-model?如何将 <input> 元素传递给绑定到某个 ng-model 的 ng-for?
【发布时间】:2017-04-16 07:41:46
【问题描述】:

背景

我正在设计一个可重复使用的表格组件。该组件最初设计为仅以表格结构显示数据。

例如,您传入一个数据数组和一个 columnInfo 数组,组件会呈现一个 HTML 表格

不过,要求发生了变化,现在表格需要支持输入字段。

文本域 1 文本域 2 文本域 3 输入 1 输入 2

testestestestestsettestsetestestsetestestsetsetsett *dropdownhere* *textbox here*

问题

首先,简单地在每一行显示一个“额外的文本框列”已被证明是困难的。

我使用了一个简单的带有单选择器的 ng-content

表格组件。 html

<tr *ngFor="let row of rows" (click)="onCellClick(row)">

     <td *ngFor="let column of _columns">
           {{ getData(row,column) }}
     </td>

     <td><ng-content select="[test]"></ng-content></td>
</tr>

父组件

<table-component [columns] = "tableHeaders"
                 [data]="_allTasksArray"
                 (cellEvent)="getActionUrl($event)"
                 [filterAllColumns]="true"
        >

            <div  test >
                <h1>TEST</h1>
            </div>

</table-component>

但是这并没有按预期工作,h1 TEST 仅在 ONE 行中呈现。经过一番挖掘,我发现从 ng-content 传入的模板只能显示一次

对我的要求不是很有用。


问题

如果有一种方法可以将 HTML 元素传递给组件以供 ngFor 使用,那么我如何将这些输入与值关联?

例如如果我想传入一个预先填充了特定于表中每一行的值的下拉列表。

它应该是这样工作的

<table-component>
    <template-for-content>
        <input [(ngModel)]="This would be linked row[column.name] in the table">
    </template-for-content>
</table-component>

表格

<td><ng-content someWayOfPassingDataBackToTemplate></ng-content></td>

【问题讨论】:

    标签: javascript html angular


    【解决方案1】:

    你应该看看 angular 2 的响应式表单模块,我认为这将是一个很好的用例。在 Angular 2 文档中有一个很好的演练。反应式表单让您可以使用对象“以编程方式”定义表单。该演练显示您必须对其进行设置,以便您可以将一组配置对象(每个对象代表一个输入)传递给一个响应式指令,它将遍历该数组并根据每个配置对象呈现一个输入。它还展示了如何从反应形式中获取数据。

    【讨论】:

    • 我一直在使用响应式表单,除非我错过了什么。当然,响应式表单仅用于将现有输入元素与 TypeScript 中的 FormControl 对象相关联。我的问题不需要假设 Input 元素的类型,FormControl 不能创建新元素,它只能绑定到模板中的现有元素。
    • angular.io/docs/ts/latest/cookbook/dynamic-form.html 这就是我所说的指南。它向您展示了如何动态呈现输入以及如何将它们绑定到表单控件对象。
    • 响应式表单无法回答我的问题,它们仍然需要我对 HTML 元素进行硬编码。我需要一种通用方法来呈现 表格标签中包含的任何 HTML 元素
    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2018-11-30
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    相关资源
    最近更新 更多