首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用指令将表单输入添加到组件中

使用指令将表单输入添加到组件中
EN

Stack Overflow用户
提问于 2017-12-11 16:31:40
回答 1查看 48关注 0票数 0

我有一个处理表单输入的组件。该组件负责表单的验证和模板,然后在有效时将表单数据传递给它的父组件。我正在与我的应用程序中的许多其他模块共享这个组件,这些模块分担着相同的责任。不过,我现在已经到了这样的地步:表单的输入将发生如此微小的变化。所以我想在这种情况下我可以使用指令。我就是这么想的。

现在,组件是这样的。

代码语言:javascript
复制
<search-form
    (onSubmit)=submitEvent...
    (onClear)=clearEvent...></search-form>

然后模板有6个输入字段。但是,如何将这6个输入字段转换为指令呢?这样我就可以把上面的

代码语言:javascript
复制
<search-form
    firstName
    lastName
    dateOfBirth
    (onSubmit)=...
    (onClear)=...></search-form>

或者说这件事没有什么好办法?

EN

回答 1

Stack Overflow用户

发布于 2017-12-11 17:18:43

因此,我认为它不是适合这项工作的工具。然而,根据您的目标,使用子组件可能是您的解决方案。此外,使用子组件是一种更像组件的方式来做事情,并将使事情更加可读性和更容易理解。

代码语言:javascript
复制
<search-form (onSubmit)="submitEvent($event)" (onClear)="clearEvent($event)">
    <search-field name="firstName"></search-field>
    <search-field name="lastName"></search-field>
    <search-field name="dateOfBirth"></search-field>
</search-form>

通过这种方式,您可以使用@ContentChildren()作为装饰器属性来提取包含所有SearchFieldQueryList,并对每个SearchField进行迭代以呈现输入。

代码语言:javascript
复制
import { Component, ContentChildren, QueryList, Input } from '@angular/core';

@Component({
  selector: 'search-field',
  template: ``
})
export class SearchFieldComponent {
  @Input('name') name: string;
}

@Component({
  selector: 'search-form',
  template: `
    <div *ngFor="let field of fields">
      <label [for]="field.name">{{ field.name }}</label>
      <input [name]="field.name" [placeholder]="field.name" type="text">
    </div>
  `
})
export class SearchFormComponent {
  @ContentChildren(SearchFieldComponent) fields: QueryList < SearchFieldComponent > ;
}

Plunkr上的工作实例

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47757286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档