서비스를 이용한 컴포넌트간 통신

lee jae hwan·2022년 9월 8일

앵귤러

목록 보기
36/83

템플릿변수, @ViewChild, @ContentChild를 이용해서 컴포넌트간 통신이 가능하고 각각의 장단점이 있다.

상하위 컴포넌트에 서비스를 의존성주입해서 컴포넌트 인스턴스를 참조하게 하면 간단하게 통신이 가능하다.

하위컴포넌트가 *ngFor로 여러개 인스턴스가 있을때는 위 방법으는 하위인스턴스들의 구분이 되지 않는다.

이런 경우에는 옵저버블 멀티캐스팅을 사용해야 한다.


  // 컴포넌트간 통신을위한 Subject생성
  private missionAnounceSource = new Subject<string>();
  private missionConfirmSource = new Subject<string>();

  // 옵저버블객체생성
  anounceStream$ = this.missionAnounceSource.asObservable();
  confirmStream$ = this.missionConfirmSource.asObservable();

  // 서비스가 옵저버블에게 데이터를 방출할 메소드, 
  anounceMission(mission:string){
    this.missionAnounceSource.next(mission);
  }

  // 서비스가 옵저버블에게 데이터를 방출할 메소드
  confirmMisson(misson:string){
    this.missionConfirmSource.next(misson);
  }

옵저버블객체를 만들때 소스데이터없이 만들고 나중에 하위컴포넌트에서 next메소드를 호출하기 때문에 Subject객체를 만든다.

Subject로부터 옵저버블객체를 만든다.

서비스인스턴스는 컴포넌트들이 공유하므로 데이터방출메소드를 만들어 놓으면 된다.

상위컴포넌트에서는 confirmStream$을 구독하고 데이터가 방출되면 로그에 삽입한다.

하위컴포넌트에서는 anounceStream$를 구독하고 데이터가 방출되면 미션제목을 수정하고 버튼을 활성화시킨다.

Subject객체를 활용하면 멀티캐스팅되고 옵저버블객체를 생성하고 next메소드로 데이터방출도 가능하다.

0개의 댓글