寻找离子 5 中事件的替代方案 [关闭]

Posted

技术标签:

【中文标题】寻找离子 5 中事件的替代方案 [关闭]【英文标题】:Searching alternative for events in ionic 5 [closed] 【发布时间】:2021-03-02 10:00:45 【问题描述】:

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 中删除了事件... 我需要如何更改 w.t.t ionic5 ..请告诉我

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

这个事件服务如何添加参数?

【问题讨论】:

这能回答你的问题吗? Ionic 4 Events not working in device but working on browser 【参考方案1】:

首先给 Su​​bject 一个类型,然后在调用 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)
  


【讨论】:

【参考方案2】:

您可以通过在幕后使用主题来构建自己的“事件服务”:

// 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 事件,因为它用于 Ionic 3。

【讨论】:

非常感谢您的帮助..我是 ionic 新手,.. 先生,实际上我需要调用注销...我在视图中有用户注销按钮和 login.ts 文件中的方法...你能告诉我如何使用事件来注销当刷新令牌过期时。谢谢 @Ajt 当然!你能用你的代码创建一个 Stackblitz 演示吗?如果需要,您可以使用 this starter :)

以上是关于寻找离子 5 中事件的替代方案 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

CKAN的替代品[关闭]

使用 DNS 工具的无 cpanel 替代方案 [关闭]

在主干js中有“onDomRefresh”事件(在Marionette中)有什么替代方案吗?

打开谷歌地图的替代品? [关闭]

从 Facebook Graph API 中提取事件的替代方法

Python sched替代取消所有事件