如何强制从Observable返回的对象类型为Angular中的对象数组?

时间:2018-06-02 22:42:35

标签: arrays angular typescript observable

我正在使用这样的GET获得回复。

constructor(private http: HttpClient) { }

items: Item[];
stuff: any[];

ngOnInit() {
  const url = ...;
  this.http.get(url)
    .subscribe(next => {
      console.log(next);
      console.log(next.length);
      this.items = next;
      this.stuff = next;
    });
}

我可以看到有6个元素和它们是什么(检查控制台)。但是,这两个字段都不在数组中。我试图使用 ngFor 指令迭代这些元素,但什么也没看到或只是一行。

<div ngFor="let item of items">
  ->{{item?.id}}
</div>

<div ngFor="let item of stuff">
  ->{{item?.id}} 
</div>

我知道我可以通过服务like this公开数据来解决这个问题,但部分原因是,我想在这里快速学习并学习如何做到这一点;部分地,我将在服务代码中遇到同样的问题。

我已尝试在 next 值上使用 map forEach ,但我收到错误消息,指出 Object < / em>不是数组。 IDE建议将工作数组添加到语法中,使其成为 next.array.forEach ,但它甚至没有执行,产生大量红色墨水。

我该怎么办? (不知道在这个阶段谷歌应该用什么。)

2 个答案:

答案 0 :(得分:1)

donkeyObservArray: Observable<Donkey[]>;
donkeyArray: Array<Donkey>;

this.donkeyObservArray.subscribe(donk=> {
this.donkeyArray = donk;

console.log(this.donkeyArray);

并且开心......

或者输入:

donkey: Donkey= null;

getDonkey(): Donkey{
    this.donkey = new Donkey();

this._http.get<Donkey>(...your ws link)
      .subscribe(data => {
        this.donkey = data;

答案 1 :(得分:1)

您可以在传递给模板之前将对象转换为数组 object-2-array-angular-4

或使用自定义管道将对象转换为数组