OnInit之外的订阅

时间:2017-08-30 08:13:12

标签: javascript angular typescript

我有两个子组件,我希望在它们之间传递数据,为此我使用服务。

在服务中我有

 headerObject = new Subject<HeaderObject>();

在第一个组件中我有方法

  onClick() {
    this.listImage = this.imageService.getImages();
    let headers = new HeaderObject();
    headers.file = this.listImage[0].data;
    this.documentService.getOcrDocument(headers).subscribe(res => {
    headers = res;
    this.ocrService.headerObject.next(headers);
  })

在第二部分

   headerSubcribed: HeaderObject;
   private headerSubscription: Subscription;

   ngOnInit() {
     this.headerSubscription = 
     this.ocrService.headerObject.subscribe((ocrHeader: HeaderObject) => {
     this.headerSubcribed = ocrHeader;
   }

但是渲染视图后只有一次ngOnInit()我想将此代码移到ngOnit之外并执行它但我不知道怎么做?如何执行该代码的一些提示?我在next()方法中设置了断点,它发出了值,但后来的方法订阅却没有执行?我能做错什么?

1 个答案:

答案 0 :(得分:1)

您可以观察/订阅两部分

观察并通知。 在您的服务中,您有一个Subject类型变量,并且您通过调用next()将值推送到它。当这个方法调用时,它通知所有观察者意味着谁订阅它。

倾听观察者并采取行动 当您收听观察者时,您会在更改值时获得更新。如果您将订阅放在onNginit或构造函数中并不重要,如果代码在那里,它会在有更改时通知您。

如果符合您的情况,您还可以探索BevavourSubject