ionic 5에서 이벤트에 대한 대안 검색 [닫힘]

Nov 19 2020

Ionic 4 구성 요소 :

import {Events} from '@ionic/angular';

 constructor(private auth: AuthService, private events: Events) {}




intercept(req: HttpRequest<any>, next: HttpHandler) {
     
 // Refresh token failed, logout user
    this.events.publish('user:logout', 'La sesión ha expirado');
    
    }

Ionic 5에서 이벤트가 제거되었습니다 ... 어떻게 wtt ionic5 ..pls를 변경해야합니까?

EDIT ::



 import { Injectable } from '@angular/core';
    import { Subject } from 'rxjs';
    
    @Injectable({providedIn: 'root'})
    
    export class EventService{
      private formRefreshAnnouncedSource = new Subject();
      formRefreshSource$ = this.formRefreshAnnouncedSource.asObservable();
    
      publishFormRefresh(){
        this.formRefreshAnnouncedSource.next()
      }
    
    }

이 이벤트 서비스에 매개 변수를 추가하는 방법은 무엇입니까?

답변

2 sebaferreras Nov 19 2020 at 16:15

이면의 주제를 사용하여 자신 만의 "이벤트 서비스"를 구축 할 수 있습니다.

// app-events.enum.ts

export enum AppEvent {
  UserLogout = 'UserLogout',
  // ...
}
// app-events.service.ts

import { Injectable } from '@angular/core';

import { Observable, Subject } from 'rxjs';
import { filter, map } from 'rxjs/operators';

import { AppEvent } from '../enums/app-event.enum';

interface EventDetails {
  event: AppEvent;
  payload?: unknown;
}

@Injectable({ providedIn: 'root' })
export class AppEventsService {
  private eventsDispatcher = new Subject<EventDetails>();

  public dispatch(event: AppEvent, payload?: unknown): void {
    this.eventsDispatcher.next({ event, payload });
  }

  public onEvent(event: AppEvent): Observable<unknown> {
    return this.eventsDispatcher.asObservable().pipe(
      filter((eventDetails) => eventDetails.event === event),
      map((eventDetails) => eventDetails.payload),
    );
  }
}

그리고 다음과 같이 사용할 수 있습니다.

// dispatch
this.appEventsService.dispatch(AppEvent.UserLogout, 'La sesión ha expirado');

// listen to events
this.appEventsService
    .onEvent(AppEvent.UserLogout)
    .subscribe((message: string) => {
      console.log(message);
    });

페이로드의 유형에 대한 더 나은 지원이 필요한 경우 개선 될 수 있다고 확신하지만 Ionic 3을 작동하는 데 사용했던 Ionic Events를 대체하기에 충분해야합니다.

1 AlexSteinberg Nov 19 2020 at 13:00

먼저 Subject에 유형을 지정한 다음 다음과 같이 next ()를 호출 할 때 매개 변수를 전달합니다.

import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';

@Injectable({providedIn: 'root'})

export class EventService{
  private formRefreshAnnouncedSource = new Subject<string>();
  formRefreshSource$ = this.formRefreshAnnouncedSource.asObservable();

  publishFormRefresh(eventName: string){
    this.formRefreshAnnouncedSource.next(eventName)
  }

}