如何在 vue-class-component 中同时使用基类和 mixin?
直接在模板中绑定来自 mixin 的函数可以正常工作,但是尝试在 typescript 代码中使用这些函数会在编译时导致错误。
据我了解,要使用 mixins,您必须从它们扩展:
class MyComp extends mixins(MixinA, MixinB)
不幸的是,我已经有一个基类,所以这不是一个选择。这是我的代码......有没有办法用 vue-class-component 做到这一点?
// mixin
@Component
export default class DownloadService extends Vue {
public downloadModel(id: string) {
alert('Downloading.');
}
}
// Base class
@Component({
props: {
id: String
}
})
export default class BaseCard extends Vue {
id: string;
protected delete() {
alert('Deleted');
}
}
// Child class
@Component({
props: {
id: String,
disabled: Boolean,
},
mixins: [DownloadService],
})
export default class ItemCard extends BaseCard {
protected clicked() {
// Causes error = S2339: Property 'downloadModel' does not exist on type 'ItemCard'.
this.downloadModel(this.id);
}
}
请注意,我可以在需要时将“this”转换为,这将起作用,但如果我必须在所有地方都这样做,这似乎有问题:
protected clicked() {
// Ideally shouldn't have to do this casting everywhere.
(<DownloadService><any>this).downloadModel(this.id);
}