2017-05-04 3 views
0

を受信して​​いないAngular2持つEventEmitterのサブスクライブ。私は再利用したいpagedDataコンポーネントを作成しましたAngular2で私は異なる署名を有する複数の機能のすべてを有する値

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

:このpagedDataは、次のページをフェッチするために、データそのものやnextUrlが含まれています。書籍、音楽、プロダクトについては、ページは同じように見えます。唯一の違いは、すべての項目を繰り返し処理する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(); 
    } 

} 

など書籍特定コード::私の問題でも、私はloadMoreに加入し、イベントを発するきたということである

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

export class BooksPage { 

    constructor(
     public bookService: BookService) { 
    } 

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

} 

は、コンポーネントのコードは次のようになりますconsole.log('res', res);は、res, undefinedと表示され続けます。

誰かが間違っているのを見ていますか?昔、私はエミッタではなくコールバックを作成し、すべてのページでコンポーネントに別のコールバックを渡すだけでした。コンポーネントは、その関数を呼び出してデータを取得することができます。たぶん私は、イベントエミッターでそのような振る舞いを作成する間違った方法を考えています。

答えて

1
this.loadMore.emit(); 

は値を送信しません。 あなたが

this.loadMore.emit('foo'); 

を使用している場合は、

+0

私は、私のコンポーネントのコンストラクタが 'this.BookService.getBooks( 'jack'、29349)'のオブザーバブルを購読していないようです。私が基本的に望むのは、データをフェッチするために使用される任意のメソッドをコンポーネントに与え、コンポーネントにそれを示すことです。これはどんな関数でも構いませんが、常にIPageDataを返します –

+0

あなたのコードからは何が起こるのかは分かりません。 'getBooks(...)'は何をしますか?それは何を返しますか、あるいは戻り値を使用しようとしていますか? –

+0

getBooksはObservableを返し、私はこのobservableの戻り値を使って自分のコンポーネントに表示しようとしています。 –

1

出力変数は、それらがまた<T>

の種類を持っている必要があり

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

this.loadMore.emit(..); 

を観測使用emmitingないために使用されているさまざまな出力が得られます

+0

技術的には購読することができますが、機能が削除される可能性があるため、購読しないでください。しかし、タイプについての良い助言。 –

関連する問題