Json 角度2-从数组中获取对象id并显示数据

Json 角度2-从数组中获取对象id并显示数据,json,angular,typescript,object,Json,Angular,Typescript,Object,我目前有一个服务,它从一个显示线索列表的json文件中获取json对象数组。每个潜在客户都有一个id,单击此列表中的潜在客户时,它会将用户带到url ie中具有此id的视图(/lead/156af71250a941ccbd65f73e5af2e67) 我一直试图通过我的leads服务通过id获取此对象,但无法使其工作。我哪里做错了 另外,我在html中使用双向绑定 服务 leads; constructor(private http: HttpClient) { } getAll

我目前有一个服务,它从一个显示线索列表的json文件中获取json对象数组。每个潜在客户都有一个id,单击此列表中的潜在客户时,它会将用户带到url ie中具有此id的视图(/lead/156af71250a941ccbd65f73e5af2e67)

我一直试图通过我的leads服务通过id获取此对象,但无法使其工作。我哪里做错了

另外,我在html中使用双向绑定

服务

  leads;

  constructor(private http: HttpClient) { }

  getAllLeads() {
    return this.http.get('../../assets/leads.json').map((response) => response);
  }

  getLead(id: any) {
    const leads = this.getAllLeads();
    const lead = this.leads.find(order => order.id === id);
    return lead;
  }
组成部分

  lead = {};

  constructor(
    private leadService: LeadService,
    private route: ActivatedRoute) {

      const id = this.route.snapshot.paramMap.get('id');
      if (id) { this.leadService.getLead(id).take(1).subscribe(lead => this.lead = lead); }

   }
JSON


您没有使用新创建的
leads
数组(
const leads
不是
this.leads
),请执行以下操作:

getLead(id: any) {
    return this.getAllLeads().find(order => order.LeadId === id);
}
并将您的
map
更改为
flatMap
,因为从服务器可以获得一个数组,但您必须将其转换为一个项目流:

getAllLeads() {
    return this.http.get('../../assets/leads.json').flatMap(data => data);
}

如果必须的话,不要忘记导入它:
import'rxjs/add/operator/flatMap'

您没有使用新创建的
leads
数组(
const leads
不是
this.leads
),因此请执行以下操作:

getLead(id: any) {
    return this.getAllLeads().find(order => order.LeadId === id);
}
并将您的
map
更改为
flatMap
,因为从服务器可以获得一个数组,但您必须将其转换为一个项目流:

getAllLeads() {
    return this.http.get('../../assets/leads.json').flatMap(data => data);
}

如果必须的话,不要忘记导入它:
import'rxjs/add/operator/flatMap'

您可以在组件级别本身使用getLead,因为您没有制作任何api来获取信息。在您的组件中

this.lead = this.leads.find(order => order.id === id);
或者,要使上述服务起作用,只需执行
leads
而不是
此项。leads

 const lead = leads.find(order => order.id === id);

您可以在组件级别本身使用getLead,因为您没有制作任何api来获取信息。在您的组件中

this.lead = this.leads.find(order => order.id === id);
或者,要使上述服务起作用,只需执行
leads
而不是
此项。leads

 const lead = leads.find(order => order.id === id);

我得到的错误属性“find”在我的getAllLeads函数的“Observable”类型上不存在?你是指我的JSON设置吗?我得到的错误属性“find”在我的getAllLeads函数的“Observable”类型上不存在?你是指我的JSON设置吗?我得到的错误属性“find”在“Observable”@DBoi类型上不存在您必须导入
find
导入'rxjs/add/operator/find'谢谢罗兰。我现在在第一个'id'上得到了这个错误-属性'id'在类型'Object'上不存在,即使我的ILead模型有一个id:string@DBoi即使您的
ILead
模型具有
id
,您确定对象具有吗?在JSON文件中,您有
LeadId
。试试这个:
order.LeadId==id
。如果这不是问题所在,请尝试记录您的对象以检查它有什么问题。这很有效。非常感谢您抽出时间来帮忙,非常感谢。还学到了一些新东西-合并地图!我得到的错误属性'find'不存在于'Observable'@DBoi类型上,您必须导入
find
import'rxjs/add/operator/find'谢谢罗兰。我现在在第一个'id'上得到了这个错误-属性'id'在类型'Object'上不存在,即使我的ILead模型有一个id:string@DBoi即使您的
ILead
模型具有
id
,您确定对象具有吗?在JSON文件中,您有
LeadId
。试试这个:
order.LeadId==id
。如果这不是问题所在,请尝试记录您的对象以检查它有什么问题。这很有效。非常感谢您抽出时间来帮忙,非常感谢。还学到了一些新东西-合并地图!