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)
}
}