我想将所有EventEmitter更改为Subjects,因为它是建议的方式来共享变量和状态而不是发出事件。
但是现在我遇到了问题,我只是不明白如何解决它。以下是示例代码:
@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):错误TS2322:输入&#39; Observable&#39;不能分配给类型&#39; JSON&#39;。 [1]财产解析&#39;类型&#39; Observable&#39;
中缺少
我想我可以将allTickets:JSON
写为allTickets:any
,但在组件中我使用 ngFor 进行迭代 - 所以我从ngFor得到错误,它需要一个数组。< / p>
提前致谢!
答案 0 :(得分:1)
您可以将allTickets
更改为类型:Observable<any>
,然后在 ngFor 绑定中,您可以像这样使用异步管道:
*ngFor="let ticket of allTickets | async"