2017-05-04 50 views
0

我有多個功能的全部與不同的簽名:訂閱Angular2 eventEmitter不接收值

所有返回相同類型的數據:pagedData。這pagedData包含數據本身和nextUrl獲取下一個頁面:

{ 
    data: [ 
    ... 
    ] 
    nextUrl: "http://api.com?page2" 
} 

在Angular2我創建,我想重用pagedData組件。對於書籍,音樂和產品,頁面看起來一樣。唯一的區別是for循環中的html遍歷所有項目。

該組件的代碼如下所示:

export class PagedData implements OnInit { 

    @Output() loadMore = new EventEmitter(); 

    nextPage = null; 

    pageData: IPagedData; 

    constructor() { 
     this.loadMore.subscribe(res => { 
      console.log('res', res); 
     }); 
    } 

    ngOnInit() { 
     this.loadMore.emit(); 
    } 

} 

和書具體代碼如下:

@Component({ 
    template: ` 
     <paged-data (loadMore)="update($event)"></paged-data> 
    ` 
}) 

export class BooksPage { 

    constructor(
     public bookService: BookService) { 
    } 

    update(event) { 
     return this.BookService.getBooks('jack', 29349); 
    } 

} 

我的問題是,即使我已經訂閱了loadMore,放出的情況下, console.log('res', res);不斷顯示res, undefined

有沒有人看到出了什麼問題?在過去,我會做一個回調而不是一個發射器,並讓每個頁面給組件一個回調。該組件然後可以調用該函數來獲取數據。也許我正在想用錯誤的方式來創建事件發射器的這種行爲。

回答

1
this.loadMore.emit(); 

不發出一個值。 如果使用

this.loadMore.emit('foo'); 

你會得到不同的輸出

+0

我明白了,我沒有得到的是,我的組件的構造函數似乎沒有訂閱'this.BookService.getBooks('jack',29349)''的observable。我基本上想要的是給我的組件一個任意的方法,用於獲取數據並將其顯示在組件中。這可能是任何函數,但始終返回IPageData –

+0

從代碼中可以看出您期望發生的事情。 'getBooks(...)'做什麼?它返回什麼,或者你甚至試圖使用返回值? –

+0

getBooks返回一個Observable,我試圖使用這個observable的返回值來顯示在我的組件中。 –

1

輸出變量用於emmiting並沒有使用這些可觀測量

@Output() loadMore = new EventEmitter<string>(); 

this.loadMore.emit(..); 

它也應該有一個類型的<T>

+0

從技術上講,您可以訂閱他們,但也許您不應該這樣做,因爲該功能可能會被刪除。不過,關於類型的建議很好。 –