web-dev-qa-db-ja.com

Angular 2つのテンプレートタグは、オブジェクトが未定義であることを示しています

Angular 2で奇妙な問題に対処する。

以下のコンポーネントを見ると、サービスは解析されたオブジェクトを返します。たとえば、私はconsole.log それ。コメントとして貼り付けられた出力を確認できます。ビューで上記のオブジェクトを使用しようとすると、エラーが発生します:EXCEPTION: TypeError: Cannot read property 'subject' of undefined in [{{theData.subject}} in SubjectHomeComponent@2:27]

コンソールでオブジェクトを問題なく見ることができるので、これは私には意味がありません。 typeofを実行すると、それがオブジェクトであることも返されます。

コンポーネントコード

import { Component, View } from 'angular2/core'
import { CORE_DIRECTIVES } from 'angular2/common'
import {SubjectService} from "../../services/subject/SubjectService.ts";
import Rx from 'rxjs/Rx'
import { Response } from 'angular2/http'
import {ROUTER_PROVIDERS} from "angular2/router";
import {RouteParams} from "angular2/router";


@Component({
    selector: 'subjectHomeComponent',
    providers: [SubjectService]
})

@View({
    template: `
        Hello World <span>{{theData.subject}}</span>
    `
})

export class SubjectHomeComponent{
    constructor(subjectService: SubjectService, params: RouteParams){
        this.id = params.get('id')

        subjectService.getSubjectCardsAndNotes(this.id)
            .subscribe((res: Response) => {
                this.theData = res
                console.log(res) //returns {"subject":{"id":1,"name":"Spanish","created_at":"2016-01-23T06:54:50.321Z","updated_at":"2016-01-23T06:54:50.321Z"},"subject_id":1,"notes":[{"id":1,"title":"first note","body":"here i am!","created_at":"2016-01-27T03:10:09.238Z","updated_at":"2016-01-27T03:10:09.238Z","subject_id":1},{"id":2,"title":"first_note","body":"hello _buddy_","created_at":"2016-01-28T20:45:36.044Z","updated_at":"2016-01-28T20:45:36.044Z","subject_id":1}]}

            });
    }
}

サービスコード(私は関係ないと思いますが、あなたは決して知りません)

import {Injectable} from "angular2/core";
import {Http, HTTP_PROVIDERS, Response} from "angular2/http";
import Rx from 'rxjs/Rx'
import 'rxjs/add/operator/map';

@Injectable()
export class SubjectService{
    constructor(public http: Http){

    }

   getSubject(){
      return this.http.request('/subjects.json')
          .map((response) => response.json())
    }
    getSubjectCardsAndNotes(id){
        return this.http.request(`subjects/${id}/subject_cards_and_notes.json`)
            .map((response) => response.json())
    }
}
7
bill-lamin

試してください:{{theData?.subject}}または<span *ngIf="theData">{{theData.subject}}</span>

重複した質問がたくさんあるのはなぜですか。

Angular 2:TypeError:l_thing0はAppComponent @ 4:44の[{{thing.title}}で未定義です]

24
Langley