Angular--(四)组件之间的通讯

梅宏盛
2023-12-01

一、父组件给子组件传值@input

1、父组件调用子组件的时候传入数据

<app-header [msg]="msg"></app-header>

2、子组件引入Input模块

import { Component, OnInit,Input } from '@angular/core';

3、子组件中@Input接收父组件传过来的数据

export class HeaderComponent implements OnInit {
  @Input() msg:string
}

4、子组件中使用父组件的数据

<h2>这是头部组件--{{msg}}</h2>

 

二、父组件主动获取子组件的数据和方法@ViewChild

1、调用子组件给子组件定义一个名称

<app-footer #footerChild></app-footer>

2、引入ViewChild

import { Component, OnInit ,ViewChild} from '@angular/core';

3、ViewChild 和刚才的子组件关联起来

 @ViewChild('footerChild') footer;

4、调用子组件

run(){ 
    this.footer.footerRun();
}

二、父组件主动获取子组件的数据和方法@Output

1、子组件引入 Output 和 EventEmitter

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

2、子组件中实例化 EventEmitter

@Output() private outer=new EventEmitter<string>();
/*用EventEmitter和output装饰器配合使用 <string>指定类型变量*/

3、子组件通过 EventEmitter 对象outer实例广播数据

sendParent(){
  this.outer.emit('msg from child')
}

4、父组件调用子组件的时候,定义接收事件,outer 就是子组件的 EventEmitter 对象 outer

<app-header (outer)="runParent($event)"></app-header>

5、父组件接收到数据会调用自己的 runParent 方法,这个时候就能拿到子组件的数据

//接收子组件传递过来的数据 
runParent(msg:string){
   alert(msg);
 }

 

三、非父子组件通讯

1、公共的服务

2、Cookie

3、Localstorage(推荐)

set(key,value){
    localStorage.setItem(key,JSON.stringify(value));
 }
 get(key){
    return JSON.parse(localStorage.getItem(key))
 }
  remove(key){
    localStorage.removeItem(key);
 }

 

 类似资料: