我有多个共享逻辑部分的组件(textField、radioField、numberField、...),例如:
//baseInputField.ts
import {createComponent} from "@vue/composition-api";
import {
useInputFieldComposition,
inputFieldProps
} from "@/mixins/Helpers/FormGeneratorInputFieldHelper/inputField.composition";
import {ComponentPropsOptions} from "@vue/composition-api/dist/component/componentProps";
export default createComponent({
props: inputFieldProps as ComponentPropsOptions,
setup(props, context) {
const {inputField, updateValue} = useInputFieldComposition(props, context);
return {
inputField, updateValue
}
}
});
目前我在每个组件的脚本标签中使用 src ,它只需要像下面这样的基本组件,它可以工作(但似乎共享一个对象而不是一个新对象,这使得我的选择选项就像一个文本字段,我不想要它):
//numberField.vue
<script lang="ts" src="../scripts/inputFieldScriptTag.ts">
</script>
对于那些像 radioField.vue 这样的代码(这里只是一个“ colorStateCheck ”,正如您在下面的代码中看到的那样)而不是 baseInputField.ts,我无法正确扩展并使用它。
//radioField.vue
import {createComponent} from "@vue/composition-api";
import {
useInputFieldComposition,
inputFieldProps
} from "@/mixins/Helpers/FormGeneratorInputFieldHelper/inputField.composition";
import {ComponentPropsOptions} from "@vue/composition-api/dist/component/componentProps";
import {FormGeneratorInputFieldsLabelValuePairs} from "@/types";
export default createComponent({
name: "RadioField",
props: inputFieldProps as ComponentPropsOptions,
setup(props, context) {
const {inputField, updateValue} = useInputFieldComposition(props, context);
const colorStateCheck = (item: FormGeneratorInputFieldsLabelValuePairs) => {
if (inputField.inputValue === item.value) {
if (item.value === false) {
return 'color:red';
} else {
return 'color:#84CE95';
}
}
return ''
};
return {
inputField, updateValue, colorStateCheck
}
}
});
有没有合适的方法来做到这一点?
......
(如果你想从选项 api 到组合 api 这条路径并解决你的问题,你可以在 Convert Vuejs Typescript Options to Composition Api 中按照这个询问奇怪的问题,我在这个问题中做了这一步)