【发布时间】:2021-02-21 13:12:28
【问题描述】:
我正在使用带有 Typescript 的 Vue v2,并且我正在尝试扩展父类:
我的父类名为BaseSelect,如下所示:
<template>
<select :value="value" @change="$emit('change', $event.target.value)">
<option value="">default option</option>
<slot />
</select>
</template>
<script lang="ts">
import { Component, Model, Vue } from 'vue-property-decorator';
@Component({})
export default class BaseSelect extends Vue {
@Model('change', { type: String, required: false, default: '' })
private readonly value!: string
private valid = true;
validate(): boolean {
this.valid = !!this.value;
return this.valid;
}
}
</script>
我的子班BaseSelectGender 看起来像这样:
<template>
<base-select :value="value" @change="$emit('change', $event)">
<option value="male">I'm male</option>
<option value="female">I'm female</option>
</base-select>
</template>
<script lang="ts">
import { Component } from 'vue-property-decorator';
import { BaseSelect } from '@/components/base';
@Component({
components: { BaseSelect }
})
export default class BaseSelectGender extends BaseSelect {}
</script>
当我在代码中使用<base-select-gender> 时,有两个BaseSelect 组件实例(因此有两个不同的valid 变量实例):
- 由于继承而创建的第一个实例
- 第二个实例是因为在子进程中使用
<base-select>而创建的
当valid 变量发生变化时,这会导致一些问题,因为该变量的错误实例反映在 DOM 中。
所以我现在的问题是:如何扩展基类并使用它,或者至少扩展子组件模板部分中的 html 代码?
【问题讨论】:
-
你弄明白了吗? :)
-
@Boern 是的,但这只是一种解决方法。我将在下面添加它作为答案。
标签: typescript vuejs2 vue-class-components