最初,我有一个看起来像这样的功能
import { CustomDate } from './../models/customDate';
export class DateService {
datePickerResultToDate(date: Date) {
var myDate: CustomDate;
var month_str: string;
switch (date.getMonth()) {
case 0:
month_str = 'Jan';
break;
case 1:
month_str = 'Feb';
break;
// etc...
default:
month_str = 'Some Error';
}
myDate.day = date.getDate();
myDate.month = date.getMonth();
myDate.year = date.getFullYear();
myDate.customDateString = date.getDate().toString() + ' ' + month_str + ' ' + date.getFullYear().toString();
return myDate
}
}
其中
export class CustomDate {
day: number;
month: number;
year: number;
customDateString: string;
}
执行后,我收到此错误
error_handler.js:54 EXCEPTION:./TimeSheetComponent类中的错误TimeSheetComponent - 内联模板:16:8导致:无法设置属性' day'未定义的
所以我认为我需要改为
var myDate: CustomDate = {
day: 0,
month: 0,
year: 0,
customDateString: ''
}
并修复了它。我的问题是,每次我想使用它时,初始化myDate ti值似乎很奇怪。有没有办法简化这个,以便当我想使用myDate时,它已经初始化并准备使用?或者我每次都必须这样做?
答案 0 :(得分:2)
您收到该错误是因为您没有注册CustomDate
课程,您只将myDate
变量设为CustomDate
类型。相反,你应该实例化CustomDate
var myDate: CustomDate = new CustomDate();
或强>
要在实例化类时减少您的工作量,您可以移动类中的所有常见内容,但您只需要将Date
对象传递给CustomDate
构造函数。
export class CustomDate {
day;
month;
year;
customDateString: Date;
constructor(Date date) {
this.day = date.getDate();
this.month = date.getMonth();
this.year = date.getFullYear();
this.customDateString = date.getDate().toString() + ' ' + month_str + ' ' + date.getFullYear().toString();
}
}
然后做类似下面的事情。
var myDate: CustomDate = new CustomDate(date);
答案 1 :(得分:1)
您可以简单地将构造函数添加到CustomDate类并初始化默认值。所以你在使用时不需要初始化它。你的班级可以是:
export class CustomDate {
day: number;
month: number;
year: number;
customDateString: string;
constructor() {
this.day = 0;
this.month = 0;
this.year = 0;
this.customDateString = '';
}
}