Как установить значение для свойства родительского компонента при нажатии кнопки в дочернем компоненте в Angular - PullRequest
1 голос
/ 11 апреля 2019

Я новичок в Angular 7 (2+) и пробую свои силы на @Input & @Output.Однако передача данных от родительского к дочернему компоненту через @Input понятна и на месте.

Однако, с другой стороны, очень проста передача данных от дочернего к родительскому компоненту с использованием концепции @Output, нореализация не получается.

Вот то, что я пытаюсь.При нажатии кнопки в дочернем компоненте свойство в родительском компоненте должно быть преобразовано в верхний регистр и отображено.

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 ]

3 голосов
/ 11 апреля 2019

(onHit)="catchChildEvent($event)" должно быть передано <app-child/>

<app-child [child-name]="HelloChild" (onHit)="catchChildEvent($event)"></app-child>
2 голосов
/ 11 апреля 2019

Вы отправляете событие из компонента 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;
  }
}
1 голос
/ 11 апреля 2019

Вы должны переместить (onHit)="catchChildEvent($event)" в app-child в родительском html:

<app-child [child-name]="HelloChild"
    (onHit)="catchChildEvent($event)>
</app-child>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...