ERROR TypeError:无法读取属性' ...'未定义的

时间:2017-12-05 15:12:26

标签: javascript angular typescript

不确定为什么会发生这种情况,我从我的组件中收到此错误:

ERROR TypeError: Cannot read property 'timezone_offset' of undefined
at Object.eval [as updateRenderer] (SettingsComponent.html:16)
at Object.debugUpdateRenderer [as updateRenderer] (core.js:14377)
at checkAndUpdateView (core.js:13513)
at callViewAction (core.js:13858)
at execComponentViewsAction (core.js:13790)
at checkAndUpdateView (core.js:13514)
at callViewAction (core.js:13858)
at execEmbeddedViewsAction (core.js:13816)
at checkAndUpdateView (core.js:13509)
at callViewAction (core.js:13858)

有趣的是,它仍然在模板中显示正确的字符串,并且ng-cli中没有错误。以下是产生错误的组件的代码:

import { Component, OnInit } from '@angular/core';
import { GetProfileService } from '../../services/get-profile.service';

@Component({
    selector: 'app-settings',
    templateUrl: './settings.component.html'
})
export class SettingsComponent implements OnInit {

    results: any;
    profile: any;

    constructor(private getProfileService: GetProfileService) { }

    ngOnInit() {

        this.getProfileService.profileAPI().subscribe(
            data => {
                this.results = data
                this.profile = this.results
                console.log(this.profile)
            }
        );

    }

}

我现在只使用{{ profile.timezone_offset }}作为我模板上的唯一内容......

2 个答案:

答案 0 :(得分:1)

您的数据似乎在呈现时尚未在profile对象中加载。只有在完成异步操作后才能在profile对象中设置数据。当您的对象在异步调用上运行时,应使用?.。仅在定义timezone_offset对象时才会评估profile

由于异步操作,您可能会收到该错误。请尝试以下

{{ profile?.timezone_offset }}

答案 1 :(得分:1)

使用?. safe navigation operator< =文档

{{ profile?.timezone_offset }}

在尝试从中访问值之前,它会检查profile是否存在。如果异步加载profile,这将非常有用。