2017-08-30 82 views
0

我有两个子组件,我想在它们之间传递数据,为此我使用服务。OnInit以外的描述

在服务我有

headerObject = new Subject<HeaderObject>(); 

在第一组分i有方法

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()方法中设置断点,它会发出值,但稍后方法subscribe不会执行?我能做什么错?

+0

放在构造函数 – Thabung

+0

@Thabung如果下一个问题发出值,那么subcribe方法会执行开始时执行的构造函数。如何执行这段代码? –

回答

1

有2个部分,你观察到的/订阅

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

听观察者和当你听一个观察者,你当他们改变了价值得到更新做动作 。无论您是将订阅放入onNginit还是构造函数中,如果代码存在,它都会在发生更改时通知您。

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

+0

我从get rest方法推到next()方法值,但订阅不通知为什么会发生这种情况? –