【发布时间】:2019-01-18 08:59:15
【问题描述】:
如何在 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);
}
【问题讨论】:
-
我没有尝试过扩展基类,但为了彻底解决 mixins 问题,我结束了创建这个:github.com/justrhysism/vue-mixin-decorator -- 没有作为答案提交,我'我不确定它实际上是一个。
标签: typescript vue.js vue-class-components