我有 3 个组件,2 个子组件和 1 个父组件。 我在父组件中有保存按钮,为了在父组件中获取子数据,我试过这个:
<div class="border border-dark p-1 m-1">
<basic-details
*ngIf="customerData"
[formType]="formType"
[customerDetails]="customerData"
#customerDetails
></basic-details>
</div>
<div class="border border-dark p-1 m-1">
<verification-details
*ngIf="customerData"
[formType]="formType"
[customerDetailsForKyc]="customerData"
#customerDetailsForKyc
></verification-details>
</div>
<div class="row main justify-content-center">
<button class="btn btn-primary" (click)="save(customerDetails, customerDetailsForKyc)">Save</button>
<button class="btn btn-primary ml-2" (click)="cancel()">Cancel</button>
</div>
<块引用>
ts 文件
save(basic, kyc) {
console.log('basic', basic);
console.log('kyc', kyc);
}
对于 basic-details
组件,我在单击保存按钮时在父组件中获得了正确的数据,但是对于 verification-details
我收到以下错误:
在两个子组件中,我都使用@Input() 获取数据,如下所示:
<块引用>对于基本组件:
@Input() customerDetails: ICustomerDetailsData;
<块引用>
用于验证组件
@Input() customerDetailsForKyc;
我做错了什么吗?
答案 0 :(得分:1)
我有一个关于你的代码的工作示例,两个孩子和一个家长。正如您在问题中所描述的,我在我的代码中使用了几乎类似的东西。你没有提到[formType]="formType"
,这就是我没有使用它的原因。请检查我的代码。它适用于 StackBlitz ==> Angular two way data binding between parent and child co acqylp
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-root',
template: `<app-children [(data)]="message"
[customerDetails]="customerData"
#customerDetails></app-children>
<br><br>
<app-children2 [(data)]="message2"
[customerDetailsForKyc]="customerData"
#customerDetailsForKyc></app-children2>
<div>Parent: {{message}}
<br>
<button class="btn btn-primary" (click)="save(customerDetails, customerDetailsForKyc)">Save</button>
</div>`,
})
export class AppComponent {
public message: string;
public message2: string;
customerData:ICustomerDetailsData={color:'TTT',width:15};
ngOnInit() {
this.message = 'Original message'
this.message2 = 'Original message2'
}
save(basic, kyc) {
console.log('basic', basic);
console.log('kyc', kyc);
}
}
@Component({
selector: 'app-children',
template: `<div>Children: {{data}}</div>
<br>
<input type="text" class="form-control" id="name"
[(ngModel)]="data" >
<br>
<a (click)="changeMessage('Children message')">Click me!</a>`
})
export class ChildComponent {
@Input() public data: string;
@Input() customerDetails: ICustomerDetailsData;
@Output() dataChange= new EventEmitter<string>();
changeMessage(message: string) {
this.data = message;
this.dataChange.emit(this.data);
}
}
@Component({
selector: 'app-children2',
template: `<div>Children: {{data}}</div>
<a (click)="changeMessage('Children message')">Click me!</a>`
})
export class ChildComponentNew {
@Input() customerDetailsForKyc;
@Input() public data: string;
@Output() dataChange= new EventEmitter<string>();
changeMessage(message: string) {
this.data = message;
this.dataChange.emit(this.data);
}
}
interface ICustomerDetailsData {
color?: string;
width?: number;
}
答案 1 :(得分:0)
原文
this.setState(prevState => newState)
使用模板变量作为参数。这是错误的,因为他们有其他目标。
“模板变量可帮助您在模板的另一部分使用模板一部分中的数据。通过模板变量,您可以执行诸如响应用户输入或微调应用程序表单等任务。”
Template variables | Angular。答案 2 :(得分:0)
从子组件到父组件获取数据的另一种选择是使用@ViewChild 装饰器将子组件注入父组件。因此,当单击保存按钮时,您应该能够获取子组件的数据。检查ViewChild | Angular