【发布时间】:2023-01-20 17:53:46
【问题描述】:
Vuetify 组件 v-form 知道一个 disabled 属性,该属性向下发布到子 vuetify 组件,如 v-text-field、v-input 等。当 v-form 的 disabled 属性设置为 true 时,所有子输入字段也(自动)被禁用。
但这仅适用于 Vuetify v-input-like 字段,但似乎确实如此不是为自己的组件工作。我希望能够“继承”disabled prop
在子组件中(做我自己的禁用用户界面)。
我不想传递反应性数据道具(在我的例子中是 formDisabled),因为这太乏味了:会有一大堆嵌套的组件 explicitely 需要我不想实现的反应性数据道具:显然它正在使用 Vuetify 自己的组件,但我怎样才能实现 自己也一样吗?
一个例子:
<template>
<v-form :disabled="formDisabled">
<!--
works, even WITHOUT explicitely binding formDisabled:
textfield gets en-/disabled according to the form state:
-->
<v-text-field />
<!-- does NOT work: Withoud bind the formDisabled prop,
I cannot get the form's disabled state in my own component: -->
<MyOwnComponent />
</v-form>
<v-btn @click="formDisabled = !formDisabled">Toggle</v-btn>
</template>
<script>
export default {
data() {
return {
formDisabled: true
};
},
};
</script>
那么,如果不将 formDisabled 数据属性显式绑定到曾经拥有的表单子组件,我该如何找出表单的禁用状态?
【问题讨论】:
-
看起来 Vuetify 组件有从 v-form 注入的值,所以你可以在你的组件中做同样的事情,我认为它是
const {isDisabled} = inject('vuetify:form')。也许也可以从 composables/form.ts 导入注入函数:const {isDisabled} = useForm()。不确定这是否比设置道具更容易。 -
感谢您的建议,不幸的是,'vuetify:form' 似乎不是上面提供的 var,因此它不被称为可注入属性。我想没有办法设置道具......
-
@AlexSchenkel 在每个子组件中传递道具(禁用状态)不是一个好主意。您可以使用
vuex商店或pinia来实现这一点。
标签: javascript vue.js vuetify.js