Angular2 и RxJS передаче объектов с обслуживания


Скажем, я хочу поделиться объекта между несколькими компонентами. Эта услуга позволит компоненты для отправки и получения объекта.

Эта функция позволяет объекту быть доступной во всем мире. Служба должна также разрешить несколько глобальных объектов и способ отписки.

Полный пример здесь.

import { Injectable } from '@angular/core';
import { 
  Subject,
  BehaviorSubject,
  Subscription } from 'rxjs';

@Injectable()
export class GlobalService {
  private subjects: object = {};

  subscribe<T>(key:string, fn: (value: T) => void, unsubscribe: Subject<any>): Subscription {
    this.putSubject<T>(key);
    return this.subjects[key]
               .takeUntil(unsubscribe)
               .subscribe({ next: fn });
  }

  emit<T>(key: string, value: T): void {
    this.putSubject<T>(key);
    this.subjects[key]
        .next(value);
  }


  private putSubject<T>(key: string): void {
    if (!this.subjects[key]) {
      this.subjects[key] = new BehaviorSubject<T>(null);
    }
  }
}

Любые комментарии приветствуются!



99
0
задан 9 февраля 2018 в 10:02 Источник Поделиться
Комментарии