Наблюдаемый BahaviorSubject не испускается - PullRequest
0 голосов
/ 19 марта 2020

У меня есть сервис обратной модели данных. Модель содержит свойство DateTime ( RelevantDateTime ) - текущий UT C DateTime, возвращаемый с сервера. Я хотел бы использовать эти данные в другом компоненте, чем тот, который выполняет службу. Для этого я использую BahaviorSubject (я использовал Subject и изменил его на BahaviorSubject). Это должно быть довольно просто, но почему-то я что-то упускаю - наблюдаемое не испускается - компонент ( HeaderComponent ), который требовал данные, не получает их. См. Мой код:

    export class MyService
    {
        content : any;
        //I've changed the Subject to BahaviorSubject
        timeOfExecutionSubject = new BahaviorSubject<Date>(new Date());
        timeOfExecutionSubjectChanged : Observable<Date> = this.timeOfExecutionSubject.asObservable();

        constructor (private httpClient : HttpClient){}
        getData()
        {
            return this.httpClient.get<myModel>(<httpGetUrl>)
            .pipe
            .tap(
                {
                    res => this.content = res;
                    this.timeOfExecutionSubject.next(content.RelevantDateTime);
                }),
                catchError(error => throwError(error))
                );
        }

        getRelevantDateTime()
        {
            return this.timeOfExecutionSubjectChanged;
        }
    }

Это компонент, который выполняет службу:

    export class MainComponent // This component execute the service
    {
        constaructor(private myService : MyService ){}
        ngOnInit()
        {
            let sub = this.myService.getData().
            subscribe (res => 
            {
                this.setData(res);
            })
        }
    }   

Это компонент, который требует RelevantDataTime

    export class HeaderComponent implements OnInit
    {
        executionDateTime : string;
        constructor(private myService: MyService)
        {
            this.myService.getRelevantDateTime().subscribe(
                result => this.executionDateTime = moment(result).format("HH:mm");
            )
        }
    }

1 Ответ

0 голосов
/ 19 марта 2020

Обнаружена причина root, из-за которой наблюдаемое не испускается. Служба должна быть объявлена ​​в самом «верхнем» модуле или в модуле, который включает в себя модули двух задействованных компонентов. В моем случае - я удалил объявление MyService из модуля, в который был включен MainComponent, и удалил его для объявления в модуле заголовка (который импортирует модуль mainComponent). См. Ссылку в: https://github.com/angular/angular/issues/11618 -
«Для того, чтобы два совместно использовали сервис между несколькими компонентами, вы должны предоставлять сервис на более высоком уровне и не добавлять сервис поставщикам обоих компонентов».

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