Angular中从父组件到子组件的数据共享

Posted

技术标签:

【中文标题】Angular中从父组件到子组件的数据共享【英文标题】:Data Sharing from parent to child component in Angular 【发布时间】:2020-07-16 07:28:33 【问题描述】:

我尝试使用 @input() 将数据从父组件发送到子组件

现在我正在尝试根据事件将数据从父组件发送到子组件。即.. 每当用户在父组件文本框中输入一些数据并点击“发送到按钮”时,它应该在子组件中显示该值。

那么,有人可以帮我解决这个问题吗?谢谢!

【问题讨论】:

你能在这里显示你的代码以便我们找到问题吗? 已经有很多类似的问题了,请搜索或查看文档angular.io/guide/…。您的选项是拦截输入值更改,发出自定义事件,甚至使用单独的服务进行通信,尽管此选项通常是兄弟组件交互的最佳选择 这能回答你的问题吗? Child listens for parent event in Angular 2 你忘了在这里解释问题@ 【参考方案1】:

这是我知道的。请搜索更多... 首先,你必须创建一个这样的服务并创建新的 BehaviorSubject,

import  Injectable  from '@angular/core';
import  BehaviorSubject, Observable  from 'rxjs';

@Injectable(
  providedIn: 'root'
)
export class InitialService 

  value = new BehaviorSubject<string>(null);

  constructor()  

  setValue(inputValue) 
    this.value.next(inputValue);
  

  getValue(): Observable<string> 
    return this.value.asObservable();
  

接下来,你可以像这样创建父component.ts(考虑我使用了app组件),

import  Component  from '@angular/core';
import  BehaviorSubject, Observable  from 'rxjs';
import  InitialService  from './services/initial.service';

@Component(
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
)
export class AppComponent 

  value = new BehaviorSubject<string>(null);

  constructor(private initialService: InitialService)  

  onClickMe(inputValue) 
    this.initialService.setValue(inputValue);
  

  getValue(): Observable<string> 
    return this.value.asObservable();
  

你的父组件.html,

<h1>Parent Component</h1>
<input #inputValue type="text">
<button (click)="onClickMe(inputValue.value)">Send to Child</button>
<app-child></app-child>

你的子组件.ts,

import  Component, OnInit  from '@angular/core';
import  InitialService from '../../services/initial.service'
import  Observable  from 'rxjs';

@Component(
  selector: 'app-child',
  templateUrl: './child.component.html',
  styleUrls: ['./child.component.scss']
)
export class ChildComponent implements OnInit 

  value: Observable<string>;

  constructor(private initialservice: InitialService) 
    this.value = initialservice.getValue();
  

  ngOnInit() 
  


你的子组件 html,

<h1>Child Component</h1>
<p>value: value | async</p>

如果有不清楚的地方,请告诉我。谢谢。

【讨论】:

以上是关于Angular中从父组件到子组件的数据共享的主要内容,如果未能解决你的问题,请参考以下文章

如何在角度2中将数据从父构造函数传递到子组件

如何正确使用 Angular 中的 Observable 将数组数据从父级发送到子级?

如果数据属性在 VueJs 中从父组件传递到子组件,则无法将其作为对象进行操作

在 AngularJS 组件中从父级到子级通信事件

Angular 2 单元测试数据从父组件传递到子组件

如何将 Angular 5 中的点击数据从父组件传递到子组件?