Как исправить проблему подписки Behavioursubject от сервиса к компоненту - PullRequest
0 голосов
/ 15 апреля 2019

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

проблема: когда я пытаюсь обновить данные в Поведенческом объекте, данные обновляются в Поведенческом объекте.подписка на компонент не обновляется.во время исполнения подписки на инициацию приложения.после инициирования на основе изменений я обновляю данные в сервисе, данные обновляются в сервисе, но подписка внутри компонента не обновляется.

Я пробовал несколько способов, таких как изменение регистрации сервиса на корневой модуль и чтотоже не работал

Вот мой код компонента:

это называется метод подписки.

 ngOnInit() {
 this.getnotifications();
 }
 getnotifications() {
     this.notifications.getjsnotifications('all');
    this.notifications.jsnotifications.subscribe(data => {
      console.log("came after the update");
      this.jsnotifications = data;
    });
   }

Вот код сервиса:


  public jsnotifications = new BehaviorSubject(null);

  constructor(){
   this.getjsnotifications("all");
  }

  getjsnotifications(type){
    this.http.get<Config>(`${environment.JS_API}/jobseeker/notifications/getJobSeekerNotifications?notificationType=`+type).subscribe(data =>{
     console.log(data.map.notificationsVo);
      this.jsnotifications.next(data.map.notificationsVo);
      this.jsnotifications.subscribe(data => {
        console.log(data);
      })
      this.testbehaviour.next(data.map.notificationsVo);
      console.log("data updated");
    });
  }

Пожалуйста, помогите мне решить проблему.

Заранее спасибо.

1 Ответ

1 голос
/ 15 апреля 2019

Ваш код верен и должен работать, несмотря на две странные вещи:

  • Подписка на HTTP-запрос в службе - это странный шаблон
  • Подписка внутри подписки HTTPбудет дублироваться при каждом HTTP-запросе

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

Обязательно объявите свою службус только одним из следующих методов:

  • С этой аннотацией @Injectable({ providedIn: 'root' })
  • В секции providers корневого модуля
...