Angular 5 - проблема при подписке на тему поведения - PullRequest
0 голосов
/ 26 июня 2018

Я сталкиваюсь с проблемой при подписке переменной Subject поведения в конструкторе одного сервиса.Подписка происходит впервые, когда значение ok равно 0 , но когда я это делаю. next (1) в сервисе 1 , подписка не происходит вконструктор службы 2.

Service 1 : Where behavior subject variable is emitting

 counter: number = -1;
 ok: BehaviorSubject<any> = new BehaviorSubject(0);
  if (this.counter === 0) {
      setTimeout(() => {
        this.checkCounterFinally();
      }, 1000);
    }
  }

  checkCounterFinally() {
    if (this.counter === 0) {
      this.ok.next(1);

    }

  }

Service 2: Where i am subscribing the behavior subject variable in constructor.

constructor(private service: Service1){
    this.service.ok.subscribe((val) => {
      console.log("service2", val);
      if (val=== 1) {
        this.getDataFromLocalStorage();
      }

    });
}

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вам необходимо вызвать следующий метод из компонента, как показано ниже.

constructor(private service: Service) {
     this.service.checkCounterFinally(); 
   }

Измените услугу следующим образом.

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

@Injectable()
export class Service {
   counter: number = -1;
    ok: BehaviorSubject<number> = new BehaviorSubject(0);
    selectedSubjectObsv = this.ok.asObservable();

     constructor() { 
if (this.counter === 0) { 
      setTimeout(() => {
        this.checkCounterFinally();
      }, 1000);
    } 
  }


     checkCounterFinally() {
   // if (this.counter === 0) {
      this.ok.next(1);

   // }

  }
}

Найти рабочий код здесь https://stackblitz.com/edit/angular-wwt91u

0 голосов
/ 26 июня 2018

Использование BehaviorSubject выглядит хорошо. Источником вашей проблемы может быть то, что в вашем приложении много экземпляров Service1.

...