Vuetify 文本字段不会使用计算 属性
Vuetify text-field won´t use computed property
我想要一个带有标签的可清除 v-text-field,以显示基于另一个 属性 的计算字符串 属性(在此简化示例中为布尔值)。
最初有效,显示正确的默认字符串值。
如果我使用 v-text-field 组件外部的按钮反转布尔值,则会按预期显示下一个正确的字符串值。
但是,如果我使用 v-text-field 中的清除按钮来反转布尔值,则 v-text-field 会在焦点丢失时清除并使用输入字段中的标签,因此不会使用预期的字符串值。
输入:
<v-text-field :value="text" label="Just a label" clearable @click:clear="booleanModel = true;"></v-text-field>
计算属性:
text: function() {
if(this.booleanModel) {
return 'Its on'
} else {
return 'Default text';
}
}
据我通过 vue 开发工具所见,v-text-field 中的状态是相同的。
怎么会这样,如何避免?
请参考这个例子:https://codepen.io/fasterlars/pen/RwKrzXZ?editors=1010
当您点击清除按钮时,booleanModel
的值不会改变。
您需要更新 @click:clear = "booleanModel = false;"
.
此外,在您的文本字段中添加一个 :key="booleanModel
,这将确保每当 booleanModel
的值更改时,它将再次重新呈现 v-text-field
组件。
老实说,您的用例看起来很奇怪,但是...
问题是 v-text-box
有一些内部状态(根据源代码注释使其在没有模型的情况下工作)并且在 clear
图标上单击它会将其设置为 null
但 它在 nextTick
- source. This is little bit strange but they probably has some reasons 中这样做...
因此,如果您不想真正清除内容而是将其设置为其他内容,请不要使用默认的“可清除”功能并改用 append
插槽:
<v-text-field :value="text" label="Just a label">
<template v-slot:append>
<v-icon @click="booleanModel = true">clear</v-icon>
</template>
</v-text-field>
我想要一个带有标签的可清除 v-text-field,以显示基于另一个 属性 的计算字符串 属性(在此简化示例中为布尔值)。
最初有效,显示正确的默认字符串值。 如果我使用 v-text-field 组件外部的按钮反转布尔值,则会按预期显示下一个正确的字符串值。 但是,如果我使用 v-text-field 中的清除按钮来反转布尔值,则 v-text-field 会在焦点丢失时清除并使用输入字段中的标签,因此不会使用预期的字符串值。
输入:
<v-text-field :value="text" label="Just a label" clearable @click:clear="booleanModel = true;"></v-text-field>
计算属性:
text: function() {
if(this.booleanModel) {
return 'Its on'
} else {
return 'Default text';
}
}
据我通过 vue 开发工具所见,v-text-field 中的状态是相同的。 怎么会这样,如何避免?
请参考这个例子:https://codepen.io/fasterlars/pen/RwKrzXZ?editors=1010
当您点击清除按钮时,booleanModel
的值不会改变。
您需要更新 @click:clear = "booleanModel = false;"
.
此外,在您的文本字段中添加一个 :key="booleanModel
,这将确保每当 booleanModel
的值更改时,它将再次重新呈现 v-text-field
组件。
老实说,您的用例看起来很奇怪,但是...
问题是 v-text-box
有一些内部状态(根据源代码注释使其在没有模型的情况下工作)并且在 clear
图标上单击它会将其设置为 null
但 它在 nextTick
- source. This is little bit strange but they probably has some reasons 中这样做...
因此,如果您不想真正清除内容而是将其设置为其他内容,请不要使用默认的“可清除”功能并改用 append
插槽:
<v-text-field :value="text" label="Just a label">
<template v-slot:append>
<v-icon @click="booleanModel = true">clear</v-icon>
</template>
</v-text-field>