我有一个Angular 4 Typescript应用程序,它有多种类型的对象,这些对象由具有不同类型属性的类定义,如下所示:
export class Fruit {
name: string;
type: string;
constructor(columnName: string) {
this.name = columnName;
}
}
export class Apple extends Fruit {
/* additional properties */
constructor(name: string) {
super(name);
}
get type(): string {
return 'apple';
}
}
export class Orange extends Fruit {
/* additional properties different from Apple */
constructor(name: string) {
super(name);
}
get type(): string {
return 'Orange';
}
}
这些对象属于数组成员中的篮子对象,如篮子中的水果。我希望能够通过表单中的下拉菜单动态设置水果的种类。每次我这样做,我得到:
ERROR TypeError: Cannot set property type of [object Object] which has only a getter
我是Typescript的新手,我认为我已经做了一个先进的事情,但这是我正在做的项目所需要的。
编辑:
我使用ng-formly生成表单元素。相关的HTML看起来像这样:
<form class="formly" role="form" [formGroup]="fruitBasket" novalidate>
<div formArrayName="fruits">
<div *ngFor="let control of fruitBasketForm.controls.fruits.controls; let i = index">
<formly-form
[model]="fruitBasket.fruits[i]"
[fields]="fruitFields[i]"
*ngIf="i === currFruitIndex">
</formly-form>
</div>
</div>
</form>
答案 0 :(得分:0)
在此示例中,您的超类应该有一个setter,因为type
字段中存在名称冲突
export class Fruit {
name: string;
type: string;
constructor(columnName: string) {
this.name = columnName;
}
set type(type){
this.type = type;
}
}
但继承的真正用法是每个对象都应该知道它们属于哪个类,并在它们的类中使用该方法。如果您依赖于继承体系结构中的type
属性,那么您实际上并没有充分利用继承权。