【问题标题】:Ionic 3 & Angular 4 - Cannot read property level of undefinedIonic 3 & Angular 4 - 无法读取未定义的属性级别
【发布时间】:2017-09-18 00:42:08
【问题描述】:

用户可以创建一种语言并选择他们的级别。

但是,当此页面加载时,我收到一条错误消息,提示“无法读取未定义的属性‘级别’”。

我假设是因为还没有创建语言对象?我如何初始化一个,而不将语言对象的每个属性都设置为“”或 null 或 false。我的问题的最佳解决方案是什么?

我尝试使用 ?像这样语言的运算符?.level 但在这里不起作用。

LanguageCreate.html

<ion-list-header>
            Level
            <ion-badge item-end color="primary">{{language.level}}</ion-badge>
        </ion-list-header>
        <ion-item no-lines="">
            <ion-range min="1" max="5" step="1" snaps="true" [(ngModel)]="language.level" color="primary">
                <ion-icon range-left small color="primary" name="level"></ion-icon>
                <ion-icon range-right color="primary" name="level"></ion-icon>
            </ion-range>
        </ion-item>

LanguageCreate.ts

export class LanguageCreatePage {

    language: {
        name: string,
        code: string,
        native: string,
        level: number,
        isTeaching: boolean,
        isLearning: boolean,
    };
    isReadyToSave: boolean;
    type: any;

    constructor(public navCtrl: NavController,
                public navParams: NavParams,
                public modalCtrl: ModalController,
                public viewCtrl: ViewController,
                public auth: Auth,
                public user: User) {




    }

【问题讨论】:

  • 使用类型安全 ? 运算符{{language?.level}}
  • @Aravind 我试过了,我仍然得到同样的错误消息

标签: angular ionic-framework ionic3


【解决方案1】:

您可以只启动空对象,错误就会消失。

language = {}

但最好将一些东西导出语言模型更改为单独的文件 并添加“?”属性,因此您可以将它们设为可选;

export interface Language {
        name?: string;
        code?: string;
        native?: string;
        level?: number;
        isTeaching?: boolean;
        isLearning?: boolean;
}

export class LanguageCreatePage {

language: Language = {}
isReadyToSave: boolean;
type: any;

constructor(public navCtrl: NavController,
            public navParams: NavParams,
            public modalCtrl: ModalController,
            public viewCtrl: ViewController,
            public auth: Auth,
            public user: User) {




}

【讨论】:

  • 我尝试在构造函数中添加它,但我收到一条消息说 type {} is not assignable to type {name: string,......}
  • 更新使它们成为可选的?
  • 我在models/文件夹下创建这个接口?
  • 是在模型文件夹中。最佳实践将它们移动到单独的文件创建接口或类和名称,如 language.model.ts。
  • 最佳实践是创建interface,如果它们被用作用户定义的数据类型
猜你喜欢
  • 2018-04-12
  • 2019-01-27
  • 2019-11-11
  • 2019-11-08
  • 2019-07-31
  • 2018-04-10
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
相关资源
最近更新 更多