我正在將一些代碼從Angular1遷移到Angular2並且出現了一些問題。我可以打開json響應,填充模板並從模板ng函數訪問數據,但無法直接從組件類訪問數據。從我閱讀的內容和看到的錯誤信息看,Angular2 http/observable似乎沒有返回純Json對象,所以我懷疑我需要重新映射它,但不知道如何。我相信也應該可以放棄使用onPromise的承諾,但還沒有設法實現這一目標。我花了很多時間搜索解決方案,並試圖實現其中的大部分,但沒有運氣。如果任何人可以建議如何重新映射可用格式的響應或直接訪問響應中的數據,將不勝感激。從服務Angular2 http observables - 如何使用undefined類型
例HTTP調用: -
getExam() {
return this._http.get('/json/exam.json')
.map(data => data.json());
}
例訂閱: -
ngOnInit() {
this._examsService.getExam()
.subscribe(response => this.exam = response);
console.log(this.exam.length); //this fails
}
例控制檯日誌錯誤: -
TypeError: Cannot read property 'length' of undefined in [null]
實施例的數據結構(非常簡化測試): -
{"title":"My Practice Exam",
"questions":[
{"question":"1+1 = ",
"answers":[
{"answer":"2","correct":"Y","selected":"N","iscorrect":""},
{"answer":"5","correct":"N","selected":"N","iscorrect":""}]},
{"question":"2+2 = ",
"answers":[
{"answer":"4","correct":"Y","selected":"N","iscorrect":""},
{"answer":"7","correct":"N","selected":"N","iscorrect":""}]},
{"question":"3+3 = ",
"answers":[
{"answer":"6","correct":"Y","selected":"N","iscorrect":""},
{"answer":"8","correct":"N","selected":"N","iscorrect":""}]}]}
在Angular1我能直接從功能訪問數據 - 例如如下,希望做類似的Angular2
if ($scope.myExams[0].questions[q].answers[a].correct == 'y') ...
似乎我的console.log調試沒有從ngOnInit工作,但我能夠從函數訪問完整的JSOn結構: - getTitle(){ console.log(this.exam.questions [1] .answers [ 1] .correct); } – Robert