我正在对我的后端getTest方法执行http请求。从使用fiddler测试的服务器返回的数据:
{
"number": "1a",
"testId": 1,
"testNumber": 5,
"testDate": "2016-05-20T00:00:00",
"assignedPupils": [],
"unAssignedPupils": []
}
订阅有问题,或者更确切地说 - 我认为 - 使用.map函数,但我不确定。当我尝试调试映射时,我从未进入EditTest类:/并且错误消息显示绑定的html中的错误,这太晚了。我需要知道为什么'测试'对象未定义!
有人看到了这个问题吗?
export class EditTestComponent implements OnInit {
test: EditTest;
constructor(
private _testsService: TestsService,
private _routeParams: RouteParams)
{ }
ngOnInit() {
let id = this._routeParams.get('id');
this._testsService.getTest(id).subscribe(test => this.test = test.map(t => new EditTest(t)));
}
}
TestService.ts:
getTest(id) {
return this.http.get('api/tests/edit/' + id).map(res => res.json());
}
HTML:
<div>
<label>id: </label>{{test.id}}
<label>number: </label>{{test.number}}
<label>date: </label>{{test.date}}
</div>
我得到了这个例外:
XCEPTION: TypeError: Cannot read property 'id' of undefined in [{{test.id}}
in EditTestComponent@3:27]
答案 0 :(得分:1)
在{{test.id}}
从后端获取指定值之前,您正在引用test
。该错误实际上会阻止脚本执行,甚至永远不会到达map
。要解决此问题,请使用Elvis Operator ?
<p>Employer: {{employer?.companyName}}</p>
安全导航操作符(?)表示雇主字段是可选的,如果未定义,则应忽略表达式的其余部分。
像这样使用:
<div>
<label>id: </label>{{test?.id}}
<label>number: </label>{{test?.number}}
<label>date: </label>{{test?.date}}
</div>
此外,您没有显示EditTest
的构造函数,因此我假设它接受属性并分配它们。