Angular 8在两个组件之间发送数据[重复]

Posted

技术标签:

【中文标题】Angular 8在两个组件之间发送数据[重复]【英文标题】:Angular 8 send data between two components [duplicate] 【发布时间】:2020-01-21 12:18:40 【问题描述】:

我的应用程序nav.componentlist.component 中有两个独立的组件。主要思想是从nav.component 发送到list.component 并在list.component 中将该值添加到数组中。我读到有很多不同的方法可以实现这一目标。我尝试了 EventEmitter 但似乎我的方法不起作用。为什么?什么是正确的方法?

导航组件

nav.component.html:

<mat-form-field class="example-full-width">
    <input matInput placeholder="Add" [(ngModel)]="value" >
</mat-form-field>

<div class="example-button-row">
    <button mat-stroked-button (click)="sendMessage()">Add</button>
</div>

nav.component.ts:

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

@Component(
  selector: 'app-nav',
  templateUrl: './nav.component.html',
  styleUrls: ['./nav.component.css']
)
export class NavComponent implements OnInit 

  public value:string;

  @Output() onAddItem = new EventEmitter<string>();

  constructor()  

  ngOnInit() 
  

  sendMessage() 
    this.onAddItem.emit(this.value);
  

列表组件

list.component.html

<mat-list role="list">
    <mat-list-item role="listitem" *ngFor="let product of Products">product</mat-list-item>
</mat-list>

list.component.ts

import  Component, OnInit  from '@angular/core';

@Component(
  selector: 'app-list',
  templateUrl: './list.component.html',
  styleUrls: ['./list.component.css']
)
export class ListComponent implements OnInit 

  public Products:string[] = ["one","two","Three","Four","Five"];

  constructor()  
  

  ngOnInit() 
  

  onAddItem(item:string)  
    this.Products.push(item);
  

【问题讨论】:

文档中有一整页是关于组件间交互的。 angular.io/guide/component-interaction 【参考方案1】:

你没有在 ListComponent 的任何地方调用onAddItem,这是它不起作用的主要原因。

EventEmitter 方法可用于在父组件和子组件之间传递数据,在您的示例中似乎也不是这种情况。

您可以尝试另一种方法,例如使用服务来传递数据。

【讨论】:

【参考方案2】:

正如@broodjetom 所指出的,位于 angular.io/guide/component-interaction 的文档通过示例解释了人们需要了解的有关组件交互的所有信息。

如果你想使用事件发射器,并且你正在使用选择器实例化你的list.component,你将需要绑定到该组件中的一个方法并在那里处理事件(包含有效负载)。

例如,在您的选择器中,您可以:

<list-component-selector (onAddItem)='onAddItem($event)'></list-component-selector>

然后在您的onAddItem 方法中处理事件中包含的字符串有效负载。

希望对您有所帮助。

【讨论】:

以上是关于Angular 8在两个组件之间发送数据[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Angular2中的组件之间共享数据[重复]

如何在 2 个组件之间进行通信 - 兄弟组件(Angular 1.5.8)

如何在两个子 Angular2 组件之间共享父 HTML?

Angular 8:将表单数据作为服务发送到另一个组件

Angular 8:通过本地服务在单独模块中的组件之间传递数据

Angular 7 rxjs BehaviorSubject 发出重复值