Angular2-从其他组件发出http.get

Angular2-从其他组件发出http.get,angular,observable,rxjs5,Angular,Observable,Rxjs5,我在工作中使用AngularJS(1.5),现在创建了我的第一个Angular2应用程序。现在我有一个关于可观测的小问题 我有这样的服务(票务服务): 现在我想从另一个组件重新加载应用程序订单页面中的票证列表: import { Component, OnInit } from '@angular/core'; import { TicketService } from '../../ticket/ticket.service'; @Component({ selector: 'ap

我在工作中使用AngularJS(1.5),现在创建了我的第一个Angular2应用程序。现在我有一个关于可观测的小问题

我有这样的服务(票务服务):

现在我想从另一个组件重新加载应用程序订单页面中的票证列表:

import { Component, OnInit } from '@angular/core';
import { TicketService } from '../../ticket/ticket.service';


@Component({
    selector: 'app-order-page',
    templateUrl: './order-page.component.html',
    styleUrls: ['./order-page.component.css']
})
export class OrderPageComponent implements OnInit {

    private states;
    private ticketService: TicketService;
    private tickets;
    private isPreview;

    constructor (ticketService: TicketService) {
        this.ticketService = ticketService;
    }

    ngOnInit () {            
        this.ticketService.getEmit().subscribe(value => {
            value.subscribe(v => {
                this.tickets = v.json();
            })
        });

        this.ticketService.emitEvent(true);
    }

}
this.ticketService.emitEvent(true);

所以,这个例子是可行的,但它很疯狂。我必须在订阅中订阅。这是个问题吗?我还有其他的可能性吗

您的问题可以通过使用Subject(而不是发射器)、Observable和switchMap(Observable的功能,您可以在谷歌上搜索如何使用)来解决。 请参阅下面的示例代码片段

findAll (): Observable<any> {
    return this.sampeSubject.switchMap(e => this.http.get(Globals.BASE_API_URL + '/ticket').map(resp => resp.json())); //this would return an Observable
}
reload(){
   this.sampeSubject.next();
}
findAll():可观察{
返回this.sampeSubject.switchMap(e=>this.http.get(Globals.BASE_API_URL+'/ticket').map(resp=>resp.json());//这将返回一个可观察的
}
重新加载(){
this.sampeSubject.next();
}
如果要重新加载票据列表,则可以调用重新加载函数

findAll (): Observable<any> {
    return this.sampeSubject.switchMap(e => this.http.get(Globals.BASE_API_URL + '/ticket').map(resp => resp.json())); //this would return an Observable
}
reload(){
   this.sampeSubject.next();
}