2017-08-30 40 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()方法值,但訂閱不通知爲什麼會發生這種情況? –