Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ionic 4 angular data.map不是函数_Angular_Typescript_Model_Ionic4 - Fatal编程技术网

Ionic 4 angular data.map不是函数

Ionic 4 angular data.map不是函数,angular,typescript,model,ionic4,Angular,Typescript,Model,Ionic4,我正在尝试将http请求的响应存储到模型中。我遵循指南并设法将数据传递到模型中。然而,我认为我做得不对,因为我无法让它显示在html上,我从控制台看到的输出有点混乱 我相信我的错误在于访问json响应,但我似乎找不到错误。有人能帮我指出我的错误吗 我的模特 // data.model.ts import { Fruits } from './fruitsId.model'; import { Deserializable } from './deserialize.model'; export

我正在尝试将http请求的响应存储到模型中。我遵循指南并设法将数据传递到模型中。然而,我认为我做得不对,因为我无法让它显示在html上,我从控制台看到的输出有点混乱

我相信我的错误在于访问json响应,但我似乎找不到错误。有人能帮我指出我的错误吗

我的模特

// data.model.ts
import { Fruits } from './fruitsId.model';
import { Deserializable } from './deserialize.model';

export class Data implements Deserializable {
  data: Fruits[];

  deserialize(input: any): this {
    Object.assign(this, input);
    this.data = input.data.map(data => new Fresh().deserialize(data));

    return this;
  }
}
然后是customerId.model.ts和storeId.model.ts,格式与freshId.model.ts相同

我的服务

// fruits.service.ts
public getAllThings(): Observable<any> {
// Some httpOptions here
// ...
return this.http
  .get(`${this.url}`, httpOptions)
  .pipe(
    // ERROR HERE: data.map is not a function
    map(data => data.map(data => new Data().deserialize(data))),
  );
}
最后在home.page.ts

// Some imports
// ...

export class DashboardPage implements OnInit {

  fruitsList: any = [];
  data: Data[];

  constructor(private fruitsService: FruitsService) { }

  ionViewWillEnter() {
    this.getFruits();
  }

  getFruits() {
    this.fruitsService.getFreshes().subscribe(
      res => this.data = res
    );
  }

}

这里是指南的作者

您的响应不是数组,而是调用响应上的
.map
,假设正好是这样。查看您的响应,正确的反序列化应该是

map(response => response.data.map(...))
因为
data
只是将实际数据保存在
data
属性中的整个响应

通过将lambda函数替换为以下函数,您可以随时查看响应的形状:

map(response => {
  console.log(response);
  return response.data.map(...);
})

所以实际上我不需要
Data
模型,只需要做
map(response=>response[`Data`].map(Data=>newfresh().deserialize(Data));
?如果我理解正确;是的,您不需要这样的模型。我的指南也不建议使用某种
数据
模型。谢谢,我感到困惑,因为我的响应格式不同。它现在工作正常。
// Some imports
// ...

export class DashboardPage implements OnInit {

  fruitsList: any = [];
  data: Data[];

  constructor(private fruitsService: FruitsService) { }

  ionViewWillEnter() {
    this.getFruits();
  }

  getFruits() {
    this.fruitsService.getFreshes().subscribe(
      res => this.data = res
    );
  }

}
map(response => response.data.map(...))
map(response => {
  console.log(response);
  return response.data.map(...);
})