Javascript 将文字对象设置为组件';s输入属性作为已知对象类
我有一个Javascript 将文字对象设置为组件';s输入属性作为已知对象类,javascript,angular,Javascript,Angular,我有一个@Input属性类型为Foo的组件: @组件({ ... }) 导出类MyComponent{ @输入()选项:Foo; ... } 并在ParentComponent.htmlliteral类中作为输入值传递给它: 然后选项的类型不再是Foo。它将更改为匿名对象,因此无法再访问Foo的方法。 防止这种情况的一种方法是在ParentComponent.ts中创建Foo的实例,并将其作为变量传递: @组件({ ... }) 导出类ParentComponent{ 选项:新Foo(真、
@Input
属性类型为Foo
的组件:
@组件({
...
})
导出类MyComponent{
@输入()选项:Foo;
...
}
并在ParentComponent.html
literal类中作为输入值传递给它:
然后选项的类型不再是Foo
。它将更改为匿名对象,因此无法再访问Foo
的方法。
防止这种情况的一种方法是在ParentComponent.ts
中创建Foo
的实例,并将其作为变量传递:
@组件({
...
})
导出类ParentComponent{
选项:新Foo(真、真、1、…);
...
}
并在ParentComponent.html
中使用:
另一种方法是以某种方式将匿名对象强制转换为新创建的Foo
对象:
@组件({
...
})
导出类MyComponent{
@Input()设置选项(值:Foo){
//不知怎的把匿名演员投给了福。
}
私人选择:Foo;
...
}
有没有更好的或内置的方法来做到这一点李>
如果没有,那么如何将匿名对象强制转换为Foo
如果要使用所描述的两种方法中的一种来使用类方法,您需要在某个时候使用new
创建类Foo
的实例。如果要将普通对象作为@Input
传入,则输入不能是(class-)类型Foo
,因为它不是该类的实例。在类中,您需要调用newfoo(fooint)
,然后调用e。G将新创建的实例分配给另一个成员变量
在我看来,最好将数据放在普通数据对象中而不是类中:为了类型安全,将Foo
定义为接口
而不是类
。然后,将类
中的方法放入一个FooService
,该服务操作Foo
对象。这样,您就不必为类实例化而烦恼了
例子
变成:
interface User {
firstName: string;
lastName: string;
}
class UserService {
getFullName(user: User): string {
return `${user.firstName} ${user.lastName}`;
}
}
您能将您的场景添加到吗?您所说的“它更改为匿名对象”是什么意思?它一点也不改变,您在没有方法的情况下创建了该对象。您不能在中创建new
某个对象,因此如果您需要它作为类的实例,那么上面显示的第二种方法,即在父组件类中创建它,是正确的方法(除了它应该是options=new Foo(…);
)。一个用于接口解决方案的简单片段就很好了。我添加了一个简单的示例。这对你有帮助吗?是的<代码>用户服务
就像用户界面上的包装器一样工作。坦克。
interface User {
firstName: string;
lastName: string;
}
class UserService {
getFullName(user: User): string {
return `${user.firstName} ${user.lastName}`;
}
}