我具有多个功能,所有功能都具有不同的签名:
getBooks(author, id);
getMusic(year, genre);
getProduct(name, id);
所有返回相同类型的数据: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
。
有人看到出了什么问题吗?在过去,我本来可以回调的,而不是发射器,只需让每个页面再回调组件即可。然后,组件可以调用该函数以获取数据。也许我正在考虑使用事件发射器来创建这种行为的方式。
this.loadMore.emit();
不发出值。如果您使用
this.loadMore.emit('foo');
您将获得不同的输出
输出变量用于弹药,不使用它们可观察到
@Output() loadMore = new EventEmitter<string>();
this.loadMore.emit(..);
它也应该有一种<T>