Ionic Angular NgModel 错误引用了接口中的子对象

Posted

技术标签:

【中文标题】Ionic Angular NgModel 错误引用了接口中的子对象【英文标题】:Ionic Angular NgModel error reference a subobject in interface 【发布时间】:2018-10-01 02:41:37 【问题描述】:

这是我的界面:

booking.interface.ts

export interface Booking 
  "dateBooking": Date;
  "period": 
    "morning": boolean;
    "afternoon": boolean;
    "night": boolean;
  

addbooking.ts

...
import  Booking  from '../../models/booking/booking.interface';
...
export class AddbookingPage 

  //declare a property of interface type
  public booking =  as Booking;

   constructor() 
  
...

当我尝试在视图中引用 booking.period.morning 或我的对象 period 的任何子属性时,Ionic 会引发错误:

addbooking.html

  <ion-item>
    <ion-label>Morning</ion-label>
    <ion-checkbox [(ngModel)]="booking.period.morning"></ion-checkbox> 
  </ion-item>

错误:

TypeError: undefined is not an object (evaluating '_co.booking.period.morning')

我尝试实现一个复选框并将数据保存在 Firebase 中。如果有任何其他方法可以实现这一点,我接受建议。

【问题讨论】:

使用类代替接口 public booking 是一个空对象,as Booking 只告诉 Typescript,它应该将 拦截为 Booking 类型。 如果稍后要初始化,可以在 html 中使用安全导航运算符 【参考方案1】:

您需要:

初始化你的对象以匹配你的界面

public booking: Booking = 
  dateBooking: new Date(),
  period: 
   morning: true,
   afternoon: false,
   night: false, 
    

或隐藏复选框,直到对象具有 period.morning 属性。

<ion-item>
  <ion-label>Morning</ion-label>
  <ion-checkbox *ngIf="booking && booking.period && typeof booking.period.morning === 'boolean'" [(ngModel)]="booking.period.morning"></ion-checkbox> 
</ion-item>

【讨论】:

谢谢。它解决了我的问题。我不知道是否需要初始化对象。 很高兴我能帮上忙。您可以投票并接受我的回答吗? :) 我试过了,但是:〜感谢您的反馈!声望低于 15 人的投票将被记录,但不会更改公开显示的帖子分数。〜

以上是关于Ionic Angular NgModel 错误引用了接口中的子对象的主要内容,如果未能解决你的问题,请参考以下文章

Angular2,Ionic2:如何使用 ngModel 对嵌套 *ngfor 中的单选按钮进行 2way 绑定?

Angular 2 Ionic 2 - 如何将最大或最小日期设置为今天以进行日期输入?

[Angular]关于ngModel与ngModelChange

在 Ionic 框架中绑定到 ngModel

NG0303:无法绑定到“ngModel”,因为它不是“离子范围”的已知属性

无法将 [(ngModel)] 绑定到 Angular html