2016-05-26 1 views
0

Я хочу изменить все мои EventEmitter на темы, так как это рекомендуемый способ обмена переменными и состояниями вместо того, чтобы излучать событие.Тип 'Observable <any>' не может быть присвоен типу 'JSON' в angular2 с rxjs5

Но теперь у меня есть проблема, и я просто не понимаю, как ее решить. Вот пример кода:

@Injectable() 
export class TicketsService implements OnInit { 
    private _url = "http://127.0.0.1:3000/api/getAllTickets"; 
    private _refreshTickets:Subject<JSON> = new Subject<JSON>(); 
    public allTickets:JSON; 

    private _url_postNewTicket = "http://127.0.0.1:3000/api/postNewTicket";  

    constructor(private _http:AuthHttp) { 
     this.allTickets = this._refreshTickets 
      .mergeMap(() => this._http.get(this._url)) 
      .map((res:Response) => res.json()) 
      .cache(); 

    } 

    refreshAllTickets() { 
     console.log("refresh all tickets.."); 
     this._refreshTickets.next(null); 
    } 
} 

Компилятор дает мне следующую ошибку:

public/angular/app/tickets.service.ts(26,9): error TS2322: Type 'Observable' is not assignable to type 'JSON'. [1] Property 'parse' is missing in type 'Observable'.

Я предполагаю, что я мог бы написать allTickets:JSON, как allTickets:any но в компоненте я использую ngFor итерировать - так что я получить ошибку от ngFor, для которой нужен массив.

Заранее благодарен!

ответ

1

Вы можете изменить allTickets быть типа: Observable<any>, а затем в вашем ngFor связывания можно использовать асинхронную трубу следующим образом:

*ngFor="let ticket of allTickets | async" 
+0

да, он действительно работал. такая очевидная ошибка ... спасибо =) – malachi54