2017-09-05 63 views
0

我的应用程序在angular2中有问题。我需要连接到api才能将记录检索到我的Persons []类。我想使用第二种方法来获取具有个人ID的人。我做同样的方式在对角网站上的教程,但不幸的是我仍然有一个故障错误TypeError:无法读取属性'名称'后得到Json

ERROR TypeError: Cannot read property 'Name' of undefined

这是我的服务

getPersons(): Promise<Person[]> { 
    var currentUser = JSON.parse(localStorage.getItem('currentUser')); 
    var token = currentUser.token; 

    let headers = new Headers({ 'Authorization': 'Bearer ' + token }) 
    let options = new RequestOptions({ headers: headers }); 
    return this.http.get(this.QuestionsUrl, options) 
     .toPromise() 
     .then(response => response.json() as Person[]); 
} 
getPerson(id: number): Promise<Person> { 
    return this.getPersons().then(persons => persons.find(person => person.Id === id)); 
} 

我的组件:

export class PersonsComponent implements OnInit { 
activePerson: any = {}; 
model: any = {}; 

constructor(private personService: PersonService, private route: ActivatedRoute, private location: Location) { 

} 

ngOnInit(): void { 
    this.route.paramMap.switchMap((params: ParamMap) => this.personService.getPerson(+params.get('Id'))) 
     .subscribe(selected => this.activePerson = selected); 


} 

}

和html:

<body> 

    {{activePerson.Name}} 

回答

0

尝试使用

{{activePerson?.Name}} 

一个问号。

问题是模板试图在检索数据之前显示值。那时,activePerson是未定义的。因此错误信息。

“?”被称为安全的导航操作员。除非问号左侧的对象具有值,否则它会阻止导航到“点”属性(本例中为名称)。

+0

你访问的名称属性其他地方? – DeborahK

+0

错误已经消失,但没有任何价值。空盒子 – Mixer94us

+0

我没有使用那样的承诺......所以我无法帮助你。您可以在您的代码中添加一些'console.log()'语句,以缩小检索数据时可能出现的问题。我可以指出一些类似的使用Observables的代码,如果这会有所帮助的话。 – DeborahK

0

使用

{{activePerson |json}} 

知道是否正在接收任何数据

+0

对不起愚蠢的问题,但我怎么检查? – Mixer94us

+0

我觉得有可能你收到了activePerson.name(小写)或activePerson.Nome(而不是activePerson.Name) – Eliseo

相关问题