Общий сервис работает только на Init - Angular - PullRequest
0 голосов
/ 07 июня 2018

Я хочу передать объект между 2 компонентами.Я создал следующую общую службу:

[PageService Component]
    private messageSource = new BehaviorSubject([]);
    currentMessage = this.messageSource.asObservable();
    changeMessage(message) {
        this.messageSource.next(message)
    }

И я реализовал ее в следующих двух компонентах:

[COMPONENT WHEN I GET ON CLICK SONO DATAS]
constructor(private pageService: PageService, private _sanitizer: DomSanitizer) {}
...
onClickMethod(){
self.pageService.getCustomers(self.filters).toPromise().then(response => {
      self.searchResults = response;
    });
     self.pageService.changeMessage(self.searchResults);
}

и

[Component where I need to see above datas]
ngOnInit() {
    let self = this;
     self.pageService.currentMessage.subscribe(message => self.searchResults = message);
    console.log(self.searchResults);

  }

Сейчас ... еслиЯ помещаю метод "changeMessage" в первый компонент в методе OnInit или в конструкторе, и я пытаюсь передать некоторые данные, такие как [1,2,3] (так что это не ответ другого API-интерфейса), это, кажется, работает ...Это не работает, только когда я помещаю его в метод onClick и передаю "self.searchResults" (ответ) ... кто-нибудь может мне помочь?

Спасибо

1 Ответ

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

Переход от этого

self.pageService.getCustomers(self.filters).toPromise().then(response => {
  self.searchResults = response;
});
self.pageService.changeMessage(self.searchResults);

к этому

self.pageService.getCustomers(self.filters).toPromise().then(response => {
  self.searchResults = response;
  self.pageService.changeMessage(self.searchResults);
});

Поскольку вы делаете HTTP-вызов (я полагаю), вам следует дождаться завершения вызова.В вашем коде это не так.

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