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

}