这应该是一件容易的事情,但我无法弄清楚出了什么问题。
我在班上有这个:
interface Message {
type: string;
email: string;
}
export class MyClass {
public message: Message;
public email: string;
constructor() { }
// ...
}
如果我绑定电子邮件变量,它就可以正常工作([(ngModel)]='email'
),但如果我尝试绑定消息[(ngModel)]='message.email'
,我收到错误:Cannot read property 'email' of undefined.
为什么角度无法达到我的对象变量?
答案 0 :(得分:1)
您需要实例化message
属性才能绑定其中一个属性的输入:
export class MyClass {
public message: Message = { type: '...', email: '...'};
public email: string;
constructor() { }
// ...
}
修改强>
在您的情况下,Message
是一个接口,因此您无法使用它来实例化此类型的对象。您需要使用文字对象表达式来实例化Message
类型的对象。 TypeScript将检查文字对象是否具有所有必需元素。
如果要实例化类型,则需要创建一个类。接口在编译的代码中没有对应关系,类有。
以下是一个示例:
export class Message {
constructor(public type: string, public email: string) {
}
}
export class MyClass {
public message: Message = new Message('type', 'email');
public email: string;
constructor() { }
// ...
}