在Angular的“子组件”中单击按钮时,如何为父组件属性设置值

时间:2019-04-11 10:58:31

标签: javascript angular angular7

我是Angular 7(2岁以上)的新手,正在尝试@Input@Output。但是,可以理解并通过@Input将数据从Parent传递到Child组件。

但是,另一方面,我们非常了解通过使用@Output概念将数据从Child组件传递到Parent组件的情况,但实现方法并不正确。

  

这是我正在尝试的。当点击一个按钮时   子组件,父组件中的属性应为   转换为大写并显示。

ChildComponent.ts

import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';

@Component({
 selector: 'app-child',
 templateUrl: './child.component.html',
})

export class ChildComponent implements OnInit {
@Input('child-name') ChildName: string;
@Output() onHit: EventEmitter<string> = new EventEmitter<string>();

constructor() { }

ngOnInit() {}

handleClick(name): void {
this.onHit.emit(name);
}}

ChildComponent.html

<h1> child works! </h1>
<button (click)="handleClick('eventEmitter')"> Click me! </button>

ParentComponent.ts

import { Component } from '@angular/core';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
 title = 'my-dream-app';
 customerName: string = "";

catchChildEvent(e) {
 console.log(e);
}}

ParentComponent.html

 <div style="text-align:center">

 <app-child [child-name]="HelloChild"></app-child>

//Trying to bind to Custom event of child component here
<b (onHit)="catchChildEvent($event)"> 
 <i> {{customerName}} </i>
</b>

控制台或绑定中没有错误

在上面的代码段中,当单击“子组件”中的按钮时,父组件的属性CustomerName应该获得值并显示?

示例: https://stackblitz.com/edit/angular-3vgorr

3 个答案:

答案 0 :(得分:3)

(onHit)="catchChildEvent($event)"应该传递给<app-child/>

<app-child [child-name]="HelloChild" (onHit)="catchChildEvent($event)"></app-child>

答案 1 :(得分:2)

您正在从app-child组件发出事件,因此请附加app-child组件的处理程序以使其起作用。

<div style="text-align:center">

<app-child (onHit)="catchChildEvent($event)" [child-name]="HelloChild"></app-child>

//Trying to bind to Custom event of child component here
<b> 
 <i> {{customerName}} </i>
</b>

在ts文件的cutomerName属性更新值内。

import { Component } from '@angular/core';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
  title = 'my-dream-app';
  customerName: string = "";

  catchChildEvent(e) {
    this.customerName = e;
  }
}

答案 2 :(得分:1)

您应该将(onHit)="catchChildEvent($event)"移至父html中的app-child

<app-child [child-name]="HelloChild"
    (onHit)="catchChildEvent($event)>
</app-child>