IONI C 5: проблемы при изменении событий на наблюдаемые - PullRequest
0 голосов
/ 17 февраля 2020

Так как Ioni c 5 вышел, я решил попробовать. Я узнал, что теперь они используют Oberservables вместо Events. У меня есть следующее событие в моем коде:

Подписка как это в моем конструкторе:

                this.events.subscribe('go-to-slide', (tab, id) => {
  this.currentID = id;
  if (id === 0) {
    this.showLeftButton = false;
  }
  // if data has already been loaded
  if (this.dataLoadedFlag === true) {
    // from tile
    if (this.globalVariableService.comesFromTileClick === true) {
      if (this.globalVariableService.languageChanged === true) {
        this.languageChanged = false;
        this.slidesComponent.slides.slideTo(id, 0);
        this.getSectorTitlesAndColours();
        this.dataLoadedFlag = true;
        this.updateHeader(id);
      } else if (this.globalVariableService.languageChanged === false) {
        this.updateHeader(id);
      }
    } else if (this.globalVariableService.comesFromTileClick === false) {

    }
  } else if (this.dataLoadedFlag === false) {

    if (this.globalVariableService.comesFromTileClick === true) {
      this.slidesComponent.slides.slideTo(id, 0);
      this.getSectorTitlesAndColours();
      this.dataLoadedFlag = true;
      this.updateHeader(id);
    } else if (this.globalVariableService.comesFromTileClick === false) {
      this.getSectorTitlesAndColours();
      this.showRightButton = true;
      this.dataLoadedFlag = true;
      this.updateHeader(0);
    }
  }
  const tempGlobalVariableService = this.globalVariableService;
  // tslint:disable-next-line: only-arrow-functions
  setTimeout(function() {
    tempGlobalVariableService.comesFromTileClick = false;
  }, 500);
});
}

и публикация события как это в различных компонентах / методах:

this.events.publish('go-to-slide', 1, 1);

Я пробовал разные способы изменить этот код на наблюдаемый, но я не могу найти правильный путь.

Кто-нибудь уже пробовал это и может мне помочь? Спасибо

1 Ответ

2 голосов
/ 17 февраля 2020

Я уже ответил здесь { ссылка }

Вы можете создать небольшую службу для этого, такую ​​как:

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

@Injectable({
    providedIn: 'root'
})
export class GlobalFooService {

    private fooSubject = new Subject<any>();

    publishSomeData(data: any) {
        this.fooSubject.next(data);
    }

    getObservable(): Subject<any> {
        return this.fooSubject;
    }
}

Для полного примера, пожалуйста, обратитесь на другой ответ.

И, кстати, чтобы обсудить этот комментарий:

Я узнал, что теперь они используют Oberservables вместо Events

Это не так. По сути, они удалили сервис Events из Ioni c 5 и попросили нас использовать Observables вместо этого, создав собственную аналогичную реализацию.

Возможно, они использовали Events для внутреннего использования. начиная с Иони c 3. Но с Иони c 4, они убрали внутреннее использование, так как Obersables сильно выросли, и это своего рода костяк для Angular и Иони c.

...