组件通讯

1、跨组件通讯

可以创建一个 共享的服务,组件可以注入该服务来存储和获取数据。

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';//用于组件之间共享数据,允许将值给多个订阅者
import { Observable } from 'rxjs';//组件之间可以进行事件的发布和订阅
@Injectable()
export class HttpserviceService {
  private massage = new Subject<any>()
  sendMassage(massage:any){
    this.massage.next(massage)//发送请求
  }
  getMessage(): Observable<any> {
    return this.massage.asObservable();
   }
}

 组件one:用于发送消息 

import { HttpserviceService } from "../httpservice.service";
@Component({
  selector: 'app-one',
  templateUrl: './one.component.html',
})
export class OneComponent implements OnInit {
  constructor( 
    public HttpserviceService: HttpserviceService,

  ) { }
 ngOnInit() {}
  sendMessage(){
    console.log(this.message)
    this.HttpserviceService.sendMassage(this.message)
  }
}
<input type="text" pInputText  [(ngModel)]="message">
<button pButton (click)="sendMessage()">按钮</button>

组件two: 用于接收消息

import { HttpserviceService } from "../httpservice.service";
@Component({
  selector: 'app-two',
  templateUrl: './two.component.html',
})
export class TwoComponent implements OnInit {
   massage: any;
   constructor( 
    public HttpserviceService: HttpserviceService,
   ) { }
   ngOnInit() {
       this.HttpserviceService.getMessage().subscribe(massage=>{
            console.log(massage)
            this.massage = massage
       })
   }
}

2、通过广播(父组件发布广播,所有订阅了消息的子组件均可以接收到消息)的形式

import {Injectable, EventEmitter} from '@angular/core';
@Injectable()
export class PareChildServe{
  public sendData: EventEmitter<any> = new EventEmitter<any>();
}

//父组件

import { PareChildServe} from "../parechildserve.service";

this.PareChildServe.sendData.emit(a)

//子组件

this.PareChildServe.sendData.subscribe(data=>{
    console.log(data)
})

3、父子组件通讯

父传子

父组件在子组件上自定义属性,子组件通过@Input() 接收 父组件传的值

父组件:

<app-child [massage]='''name"></app-child>

子组件:

@Input() pubilc massage : any;

子传父:

父组件在子组件上自定义事件,子组件通过@Output() 绑定 通过EventEmitter事件发射器

父组件:

<app-child (massage)="name($event)"></ap-child>

name(e){

        console.log(e)

}

子组件:

@Output() massage : EventEmitter<any> = new EventEmitter();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值