共享服务仅适用于onInit - Angular

时间:2018-06-07 07:47:37

标签: javascript angular rest typescript observable

我想在两个组件之间传递一个对象。我创建了以下共享服务:

[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);

  }

现在...如果我将“changeMes​​sage”方法放在方法onInit或costructor中的第一个组件中,我尝试传递一些数据,如[1,2,3](所以不是另一个api的响应它似乎工作......当我把它放在onClick方法并传递“self.searchResults”(响应)时,这不起作用......任何人都可以帮助我吗?

谢谢

1 个答案:

答案 0 :(得分:0)

从这里开始

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调用(我假设),您应该等待调用结束。在你的代码中,它没有。