【发布时间】:2020-10-27 07:09:40
【问题描述】:
我有一个父组件,我有一个子组件。我的子组件具有反应形式。我想从子表单中捕获一些输入并提交。但是,只要表单在子组件内(而不是仅仅在父组件内),提交函数就会进行回发。如果相同的组件是独立的而不是另一个组件的子组件,则它可以正常工作。我对角度有点陌生,所以我觉得有一些我不知道的标准方法来完成这个。
我的项目是一个角离子项目,但这应该与它无关。此外,我最初尝试将此子组件 (AdditemComponent) 用作离子模式,并且遇到了相同的问题,即表单发布正在回发到查询字符串,而不是仅调用 onSave 方法。
我的目标是捕获子组件中的数据,并在子组件中处理和提交数据。这样我就可以把它放在我需要的地方。
Parent.ts:
import { Component, OnInit, Input } from '@angular/core';
import { AdditemComponent } from 'src/app/competitions/additem/additem.component'
@Component({
selector: 'app-settings',
templateUrl: './settings.page.html',
styleUrls: ['./settings.page.scss'],
})
export class SettingsPage implements OnInit {
constructor(){ }
ngOnInit(){ }
}
父.html
<ion-header>
<ion-toolbar>
<ion-title class="ion-text-center">Settings</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<app-additem></app-additem>
</ion-content>
Child.ts
import { Component, OnInit, Input } from '@angular/core';
import { ModalController } from '@ionic/angular';
import { FormGroup, FormBuilder } from '@angular/forms';
@Component({
selector: 'app-additem',
templateUrl: './additem.component.html',
styleUrls: ['./additem.component.scss'],
})
export class AddplayerComponent implements OnInit {
@Input() selectedResult;
private newItemForm : FormGroup;
private teams:[];
constructor(
private modalCtrl: ModalController,
private formBuilder: FormBuilder,
private dataservice
) {
this.newItemForm = this.formBuilder.group({
fname: [''],
lname: [''],
shortname: [''],
team: ['']
})
}
ngOnInit() {
}
onSave() {
console.log('captured form data', this.newItemForm);
}
onCancel() {
this.modalCtrl.dismiss(null, 'cancel');
}
}
Child.html
<ion-item class="header">
<p>Add New Item</p>
</ion-item>
<form [formGroup]="newItemForm" (ngSubmit)="onSave()">
<ion-item>
<ion-label>First Name</ion-label>
<ion-input type="text" formControlName="fname"></ion-input>
</ion-item>
<ion-item>
<ion-label>Last Name</ion-label>
<ion-input formControlName="lname"></ion-input>
</ion-item>
<ion-item>
<ion-label>Short Name</ion-label>
<ion-input formControlName="shortname"></ion-input>
</ion-item>
<ion-item>
<ion-label>Team</ion-label>
<ion-select formControlName="item">
<ion-item *ngFor="let item of items">
<ion-select-option [value]="item.itemId">{{item.itemName}}</ion-select-option>
</ion-item>
</ion-select>
</ion-item>
<ion-item>
<ion-button color="primary" type="submit" [disabled]="!newItemForm.valid">Submit</ion-button>
<ion-button color="danger" (click)="onCancel()">Cancel</ion-button>
</ion-item>
</form>
【问题讨论】: