компонент связи с использованием сервиса - PullRequest
0 голосов
/ 19 апреля 2020

В моем angular 6 я выполняю компонентную связь с использованием сервиса:

service.ts

import { Injectable, Inject } from '@angular/core';
import { Subject } from 'rxjs';
//import { Subject }    from 'rxjs/Subject';
@Injectable()
export class ComponentCommunicationService {
  private notify = new Subject<any>();
  /**
   * Observable string streams
   */
  notifyObservable$ = this.notify.asObservable();

  constructor(){}

  public notifyOther(data: any) {
    if (data) {
      this.notify.next(data);
    }
  }
}

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

let isRoleFound= true;
 if(this.isRoleFound){
      this.componentCommunicationService.notifyOther({value:this.isRoleFound,option:'call from menu'});
      this.ref.detectChanges();
    }

вызов службы в дочернем компоненте C:

import {ComponentCommunicationService} from 'libs/services-module/src/commonservice/componentcommunication.service'
 constructor(
    private componentCommunicationService:ComponentCommunicationService
  ) { }

      ngOnInit() {
       this.componentCommunicationService.notifyObservable$.subscribe(res => {
          if (res.hasOwnProperty('option') && res.option === 'call from menu') {
            console.log(res.value)
            this.isRoldFound= res.value;

          }
      }) 
    }

Здесь вызов создается из родительского компонента и переходит в жизненный цикл дочернего компонента ngOnInit хук, но в конечном итоге он не go внутри, если l oop и выпрыгивает.

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

1 Ответ

0 голосов
/ 19 апреля 2020

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

private notify = new ReplaySubject<any>(1);

субъекты воспроизведения воспроизводят свои значения новым подписчикам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...