Angular2 - 将输入验证数据从父输入传递到子输入

Posted

技术标签:

【中文标题】Angular2 - 将输入验证数据从父输入传递到子输入【英文标题】:Angular2 - Pass input validation data from parent to child input 【发布时间】:2017-05-17 23:22:20 【问题描述】:

我正在 Angular2 中创建某种自动单词校正模块。

我的子组件中有一个 EventEmitter 设置

import Component, Input, Output, EventEmitter from '@angular/core';
...
export class StudyThumbsComponent
  @Output() notify: EventEmitter<any> = new EventEmitter();
  ...
  verify(input, i) 
    this.answer.input = input;
    this.answer.id = i;
    this.notify.emit(this.answer);
  

“i”是输入的索引,因为组件中有许多输入要检查。

子组件html

<input type="text" [(ngModel)]="item.input" (keyup)="verify($event, i)">

自动单词校正的逻辑在父组件中,因为可能有不同类型的子组件需要自动单词校正功能:

export class ParentComponent
  verify(event:any, i) 

    var answer = event.target.value;

    // the variable answer gets corrected/modified and assigned to...
    var correctedAnswer;

  

  onNotify(answer) 
    this.verify(answer.input, answer.id);
  


这个发布的代码在这一点上有效,所以问题是,我如何用更正的答案 (correctedAnswer) 更新孩子的组件输入?

【问题讨论】:

【参考方案1】:

在您的子组件中有一个@Input string,用于接收每个验证的输出。该验证变量将由父级的 verify 函数更改。

@Input() validated: String;

您可以使用ngOnChanges() 检测输入更改

或者:

将有关拼写检查器的所有逻辑移至服务中。

然后您可以在您需要使用拼写检查器的所有组件上导入该服务。

另外,我认为拼写检查器不需要了解字段或索引。用文本输入应该很好:

export class SpellCheckerService 

  validate(str): String 

  

根据您对所有内容的结构,我认为它甚至可能最适合放入 /utils 文件夹。

【讨论】:

谢谢 zurfyx。两者似乎都运作良好。选择第一个选项,因为它更好地匹配我的代码的其他部分。

以上是关于Angular2 - 将输入验证数据从父输入传递到子输入的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 单元测试数据从父组件传递到子组件

Vuejs将动态数据从父组件传递给子组件

如何在不使用角度的ng的情况下将输入值从父组件传递给子组件?

如何在角度2中将数据从父构造函数传递到子组件

Angular2 - 使用旧数据的自定义验证器

如何从 Angular2 FormControl 对象中获取输入字段的名称?