Angular 组件通信

Posted

技术标签:

【中文标题】Angular 组件通信【英文标题】:Angular component comuniaction 【发布时间】:2020-08-14 23:43:50 【问题描述】:

我需要有关角度组件通信的帮助。

我有父组件和子组件。

在父组件中我有列表。我想单击项目列表并将数据 name, text 移动到子组件并将其设置为 froala 编辑器所在的子组件。

【问题讨论】:

从这里开始:angular.io/guide/component-interaction 这太宽泛了。请更具体。 【参考方案1】:

在 Angular 中,有两种方法可以实现组件互通。

    使用输入绑定将数据从父级传递给子级
@Component(
  selector: 'app-parent',
  template: `
    <app-child [childMessage]="parentMessage"></app-child>
  `,
  styleUrls: ['./parent.component.css']
)
export class ParentComponent
  parentMessage = "message from parent"
  constructor()  

@Component(
  selector: 'app-child',
  template: `
      Say  message 
  `,
  styleUrls: ['./child.component.css']
)

export class ChildComponent 

  @Input() childMessage: string;

  constructor()  


    使用 Angular 服务(当通信的组件直接相关时使用此方法)。但是根据您的描述,您可以通过角度服务做得更好。单击项目列表时,可以调用将数据推送到 BehaviourSubject 的服务函数。之后,所有订阅该 Behavior 主题的组件都将获取您传递的数据。
@Injectable()
export class DataService 

  private messageSource = new BehaviorSubject('default message');
  currentMessage = this.messageSource.asObservable();

  constructor()  

  changeMessage(message: string) 
    this.messageSource.next(message)
  


import  Component, OnInit  from '@angular/core';
import  DataService  from "../data.service";

@Component(
  selector: 'app-parent',
  template: `
    message
  `,
  styleUrls: ['./sibling.component.css']
)
export class ParentComponent implements OnInit 

  message:string;

  constructor(private data: DataService)  

  ngOnInit() 
    this.data.currentMessage.subscribe(message => this.message = message)
  


import  Component, OnInit  from '@angular/core';
import  DataService  from "../data.service";

@Component(
  selector: 'app-sibling',
  template: `
    message
    <button (click)="newMessage()">New Message</button>
  `,
  styleUrls: ['./sibling.component.css']
)
export class SiblingComponent implements OnInit 

  message:string;

  constructor(private data: DataService)  

  ngOnInit() 
    this.data.currentMessage.subscribe(message => this.message = message)
  

  newMessage() 
    this.data.changeMessage("Hello from Sibling")
  


【讨论】:

以上是关于Angular 组件通信的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 - 组件通信

关于Angular2组件通信---自己的一点总结

两个独立组件之间的通信 angular 2

Angular2:父子组件通信

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

angular 父子组件通信