搜尋

首頁  >  問答  >  主體

javascript - angularjs取得後端資料後賦值給成員變量,前台console報成員變數undefined的錯誤

angularjs取得後端資料後賦值給成員變量,前台console報成員變數undefined的錯誤,錯誤提示如下:

EXCEPTION: Error in ./ExerciseDetailComponent class ExerciseDetailComponent - inline template:3:12 caused by: Cannot read property 'name' of undefined

另一個錯誤提示

ORIGINAL EXCEPTION: Cannot read property 'name' of undefined

程式碼如下:

import { Component, OnInit } from '@angular/core';

import { Exercise } from './exercise'
import { ExerciseService } from './exercise.service'

@Component({
    selector: 'exercise-detail',
    templateUrl: './exercise-detail.component.html',
})
export class ExerciseDetailComponent implements OnInit {

    exercise: Exercise;

    constructor(private exerciseService: ExerciseService) {}

    getExercise(): void {
        this.exerciseService.getExercise().then(exercise => this.exercise = exercise);
    }

    ngOnInit(): void {
        this.getExercise();
    }
}

因為,錯誤代碼提示是我exercise內的屬性沒有定義,所以我把上面exercise聲明的程式碼改成如下程式碼就可以從後台拿到的資料賦值給exercise成員變數了,而且前台顯示的資料也不是undefined,而是數據中所獲得的數據。雖然問題用這個方法可以解決,但是這樣很影響程式碼可讀性。

exercise: Exercise = {
        id: undefined,
        name: undefined,
        timerDuration: undefined
    };

我想知道這是什麼原因造成的?理論上從後台拿到的資料已經開啟記憶體空間了,應該可以直接賦值給成員變數啊,不用成員變數也初始化。
而且我另一個根據angular2官方教程寫的component也是只聲明了成員變量,並沒有初始化,就可以得到後台的數據啊。

求解答

巴扎黑巴扎黑2780 天前511

全部回覆(1)我來回復

  • 黄舟

    黄舟2017-05-19 10:11:49

    出現這個錯誤可能exercise 就已经是undefined 了吧,所以才没有name这个属性,才会报错,而不是exercise 的變數沒有賦值

    回覆
    0
  • 取消回覆