Angular1 から Angular2 にいくつかのコードを移行していますが、いくつかの問題があります。json 応答を開き、テンプレートに入力し、テンプレート ng 関数からデータにアクセスできますが、コンポーネント クラスから直接データにアクセスすることはできませんでした。私が読んだこととAngular2 http / observableが純粋なjsonオブジェクトを返していないように見えるエラーメッセージから、再マップする必要があると思われますが、その方法はわかりません。onPromise を使用して promise に戻すことも可能であると思いますが、それを機能させることができませんでした。私は解決策を探すのに多くの時間を費やし、それらのほとんどを実装しようとしましたが、うまくいきませんでした。応答を使用可能な形式に再マッピングする方法や、応答内のデータに直接アクセスする方法について誰かがアドバイスできる場合は、大歓迎です。
サービスからの 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') ...