【问题标题】:How to validate user inputs which comes both from parent component and child component before submitting data using save button in parent component?在使用父组件中的保存按钮提交数据之前,如何验证来自父组件和子组件的用户输入?
【发布时间】:2019-06-13 20:48:16
【问题描述】:

我有一个父组件“Parent”和一个子组件“Child”,在通过路由器链接单击锚标记时在父组件中调用它。 父组件中有两个用户输入,子组件中有两个用户输入。父组件中包含一个保存按钮。如何验证用户是否在父组件和子组件中都输入了数据,以便验证和保存用户输入?

父组件模板:

<img src="save.png"(click)="validateandsave(model)">
<input type="text" name="code" [(ngModel)]="model.code">
<input type="text" name="name" [(ngModel)]="model.name">
<a routerLink="PC">
<div (click)="showsettings()"> </div>
<router-outlet><router-outlet>

ParentComponent ts 文件:

showsettings() 
{ 
    this.router.navigate(['PC'], { relativeTo: this.route }); 
}
validateandsave()
{
    /*how to implement since i have inputs in child component as well*/
}

子组件模板:

<input type="text" name="phonenumber" [(ngModel)]="phonenumber">
<input type="text" name="address" [(ngModel)]="address">

如何验证用户是否在所有四个输入中都输入了数据(来自父母和孩子)?以便我可以保存数据

app-routing.module.ts 文件:

const routes: Routes = [{
        path: 'enter',
        component: ParentComponent,
        children: [

          {
            path: 'PC',
            component: ChildComponent
          }
        ]
      }
    ];

【问题讨论】:

  • 你能分享你的代码吗
  • 嘿,这就够了吗?
  • 代码 sn-p 与您的问题不匹配,您的parent component 中的child component 在哪里?
  • 嘿,现在好吗?抱歉,我之前没有上传 app.routing 模块
  • 子表单字段仅在您转到该页面时显示对吗?

标签: angular typescript


【解决方案1】:

您可以使用 controlcontainer 将您的子表单字段注册到父表单。首先你应该将你的路由器插座包裹在你的表单标签中。

<form #f="ngForm"> 
 Email:<input type="text" ngModel name="email">
<br>
 Name:<input type="text" ngModel name="name">
 <a routerLink='pc'>Next</a>
 <router-outlet></router-outlet>
</form>

然后使用 viewproviders 来提供控件容器并使用现有的表单。

import { Component, OnInit } from '@angular/core';
import { ControlContainer, NgForm } from '@angular/forms';
@Component({
  selector: 'app-pc',
  templateUrl: './pc.component.html',
  styleUrls: ['./pc.component.css'],
  viewProviders:[{provide: ControlContainer, useExisting: NgForm}]
})
export class PcComponent implements OnInit {

  constructor() { }

  ngOnInit() {
  }

}

例如:https://stackblitz.com/edit/angular-9z52wq

【讨论】:

  • 有趣。我不知道你能做到。
  • 非常感谢...但这是唯一可行的方法吗???因为我不能这样做...因为我有其他不应该在表单中的 div...它会弄乱我的用户界面..
  • 不能把div放在表单外面吗?
  • 嘿..我是个白痴...我可以将所有 div 放入表单中.....非常感谢
  • @Chellappan 嘿...我如何在 html 端进行验证??
猜你喜欢
  • 2018-08-30
  • 2017-05-28
  • 2019-09-27
  • 2017-09-07
  • 2022-06-11
  • 2019-03-07
  • 2022-01-25
  • 2017-04-05
  • 2019-05-06
相关资源
最近更新 更多