Alternative nach Ereignissen in ionic 5 suchen [geschlossen]

Nov 19 2020

Ionic 4 Komponenten:

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

In Ionic 5 werden Ereignisse entfernt ... Wie ich wtt ionic5 chnage muss ..Pls lass es mich wissen

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

Wie füge ich diesem Ereignisdienst Parameter hinzu?

Antworten

2 sebaferreras Nov 19 2020 at 16:15

Sie können Ihren eigenen "Veranstaltungsdienst" erstellen, indem Sie ein Thema hinter den Kulissen verwenden:

// 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),
    );
  }
}

Und dann können Sie es so verwenden:

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

Ich bin sicher, dass dies verbessert werden könnte, wenn Sie eine bessere Unterstützung für Typen in der Nutzlast benötigen, aber es sollte mehr als genug sein, um ionische Ereignisse zu ersetzen, wie es früher für Ionic 3 funktioniert hat.

1 AlexSteinberg Nov 19 2020 at 13:00

Geben Sie dem Betreff zuerst einen Typ und übergeben Sie dann einen oder mehrere Parameter, wenn Sie next () aufrufen, wie folgt:

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

}