2017-05-04 68 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

从技术上讲,您可以订阅他们,但也许您不应该这样做,因为该功能可能会被删除。不过,关于类型的建议很好。 –