Poszukiwanie alternatywy dla wydarzeń w Ionic 5 [zamknięte]
Nov 19 2020
Komponenty 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');
}
W Ionic 5 zdarzenia są usuwane ... Jak mam zmienić wtt ionic5 ..Pls daj mi znać
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()
}
}
Jak dodać parametr do tej usługi eventowej?
Odpowiedzi
2 sebaferreras Nov 19 2020 at 16:15
Możesz zbudować własną „usługę wydarzeń”, wykorzystując temat zza kulis:
// 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),
);
}
}
A potem możesz go używać w ten sposób:
// 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);
});
Jestem pewien, że można to poprawić, jeśli potrzebujesz lepszej obsługi typów w ładunku, ale powinno to wystarczyć, aby zastąpić Ionic Events, tak jak kiedyś działało Ionic 3.
1 AlexSteinberg Nov 19 2020 at 13:00
Najpierw nadaj Subjectowi typ, a następnie przekaż parametr (y) podczas wywoływania next (), na przykład:
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)
}
}