繁体   English   中英

订阅Angular2 eventEmitter没有收到价值

[英]Subscribing to Angular2 eventEmitter not receiving value

我有多个功能都不同的签名:

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();
    }

}

以及特定于Book的代码,例如:

@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>类型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM