我正在使用vue-loader来构建我的*.vue
单文件组件,但是在尝试从另一个组件扩展单文件组件的过程中遇到麻烦。
如果一个组件遵循规范:export default { [组件“Foo”定义] }
,我认为只需要像导入任何子组件一样导入此组件,然后export default Foo.extend({ [扩展组件定义] })
不幸的是,这并不起作用。请问有人可以提供建议吗?
我正在使用vue-loader来构建我的*.vue
单文件组件,但是在尝试从另一个组件扩展单文件组件的过程中遇到麻烦。
如果一个组件遵循规范:export default { [组件“Foo”定义] }
,我认为只需要像导入任何子组件一样导入此组件,然后export default Foo.extend({ [扩展组件定义] })
不幸的是,这并不起作用。请问有人可以提供建议吗?
经过一些测试,简单的解决方案是确保导出一个Vue.extend()
对象而不是一个普通对象来扩展任何组件。
在我的情况下,基础组件:
import Vue from 'vue'
export default Vue.extend({ [component "Foo" definition] })
以及扩展组件:
import Foo from './Foo'
export default Foo.extend({ [extended component definition] })
另一种可能性是extends
选项:
import Foo from './Foo'
export default { extends: Foo }
正确的做法是使用混入(mixins): http://vuejs.org/guide/mixins.html
将混入视为抽象组件,您可以扩展它。因此,您可以创建一个混入,其中包含您想要在两者中具有的任何功能,然后将其应用于每个组件。
import { reactive, computed } from "vue";
export default function {
const state = reactive({
count: 0,
double: computed(() => state.count * 2)
});
function increment() {
state.count++
}
return {
count,
double,
increment
}
}
MyComponent.vue
<template>
<button @click="increment">
Count is: {{ count }}, double is: {{ double }}
</button>
</template>
<script>
import useCounter from "./useCounter";
export default {
setup() {
const { count, double, increment } = useCounter();
return {
count,
double,
increment
}
}
}
</script>