使用组件属性的 Mixin(Vue 2、TypeScript)
Posted
技术标签:
【中文标题】使用组件属性的 Mixin(Vue 2、TypeScript)【英文标题】:Mixin that uses component properties (Vue 2, TypeScript) 【发布时间】:2021-10-05 19:56:04 【问题描述】:我有Vue
+ TypeScript
项目,我们正在使用Vue class components
。组件的方法之一被移动到单独的 mixin。该 mixin 使用组件的属性。为了防止TypeScript
抱怨缺少mixin 属性,我创建了与mixin 同名的接口:
export interface ExpSelectedHandlerMixin
loading: boolean;
selected: VouchersPoolTable[];
currentApplication: string;
items: VouchersPoolTable[];
@Component()
export class ExpSelectedHandlerMixin extends Vue
// ...
然后像这样将 mixin 连接到我的组件:
import Mixins from 'vue-property-decorator';
export default class PageVouchersTable extends Mixins(ExpSelectedHandlerMixin)
// ...
之后我收到文本错误:
类“PageVouchersTable”错误地扩展了基类“ExpSelectedHandlerMixin & Vue & object & Record
好的,我在组件public
中创建了loading
、selected
、currentApplication
、items
属性(只是删除了private
修饰符)。
这行得通。
但是:
是否有可能以某种方式连接使用组件属性的 mixin 而无需创建这些属性 public
?
【问题讨论】:
【参考方案1】:决定去掉mixin文件中不必要的接口声明,在组件中保留共享属性为public
。最终版本的代码是:
// Mixin
@Component()
export default class ExpSelectedHandlerMixin extends Vue
loading = false
items: VouchersPoolTable[] = []
selected: VouchersPoolTable[] = []
// ...
// Component
import Mixins from 'vue-property-decorator';
@Component()
export default class PageVouchersTable extends Mixins(ExpSelectedHandlerMixin)
// Next three properties are public to be accessible in ExpSelectedHandlerMixin
loading = false
items: VouchersPoolTable[] = []
selected: VouchersPoolTable[] = []
// ...
【讨论】:
以上是关于使用组件属性的 Mixin(Vue 2、TypeScript)的主要内容,如果未能解决你的问题,请参考以下文章
Vue js:如何在两个组件中使用 mixin 功能?通过执行错误