vuejs2 - 如何在 Vuetify 中禁用文字值?

标签 vuejs2 vuetify.js disable select-options

在 vuetify 的 v-select 组件上使用“item-disabled” Prop 时遇到问题。我正在尝试将其与文字选项一起使用。

这是重现问题的片段:

在这个例子中,我想禁用“Buzz”选项。

Vue.use(Vuetify)

new Vue({
  el: '#app',
  data: () => ({
    items: ['Foo', 'Bar', 'Fizz', 'Buzz'],
    disabledItems: ['Buzz'],
  })
})
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/vuetify/1.5.14/vuetify.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuetify/1.5.14/vuetify.min.js"></script>

<div id="app">
  <v-app id="inspire">
    <v-container fluid grid-list-xl>
      <v-layout wrap align-center>
        <v-flex xs12 sm6 d-flex>
          <v-select :items="items" :item-disabled="disabledItems" box label="Box style"></v-select>
        </v-flex>
      </v-layout>
    </v-container>
  </v-app>
</div>

<v-select :items="items" :item-disabled="disabledItems"></v-select>
...
items: ['Foo', 'Bar', 'Fizz', 'Buzz'],
disabledItems: ['Buzz'],

我确实意识到我可以像在这个例子中那样使用非文字键值对:https://codepen.io/anon/pen/joyoaj它会起作用。但是我宁愿不必编写包装器组件来将文字选项转换为键值来解决这个问题。
<v-select :items="items"></v-select>
...
items: [
  {text: 'Foo', value: 'Foo'}, 
  {text: 'Bar', value: 'Bar'}, 
  {text: 'Fizz', value: 'Fizz'}, 
  {text: 'Buzz', value: 'Buzz', disabled: true},
],

有谁知道如何禁用文字值工作?

最佳答案

你不能那样做,因为 item-disabled属性(property)实际上是为了别的东西。

来自 docs :

item-disabled
Default: disabled
Type: string | array | function

Set property of items's disabled value



所以item-disabled只是指定对象上的哪个字段将被视为“禁用字段”。默认情况下,该字段为 disabled .

item-disabled你会有这样的对象:
items: [
  {text: 'Foo', value: 'Foo'}, 
  {text: 'Buzz', value: 'Buzz', disabled: true},
],

如果对象具有其他一些“禁用属性”(例如 customDisabled ),则使用 item-disabled像这样的 Prop :
 <v-select :items="items" item-disabled="customDisabled"

// ...
items: [
  {text: 'Foo', value: 'Foo'}, 
  {text: 'Buzz', value: 'Buzz', customDisabled: true},
],

Codepen

如果您需要保留字符串数组,那么您可以将项目映射到对象数组并传递它:
<v-select :items="computedItems"
// ...
data: () => ({
  items: ['Foo', 'Bar', 'Fizz', 'Buzz'],
  disabledItems: ['Buzz'],
}), 
computed: {
  computedItems() {
    return this.items.map(item => {
      return {
        text: item, 
        disabled: this.disabledItems.includes(item)
      }
    })
  }
}

Codepen



此外,如果您的禁用字段是嵌套的,您可以传递数组以达到所需的深度,例如:
:item-disabled="['meta', 'disabled']"
// ...
{
  text: item, 
  meta: {
    disabled: true 
  }
}

关于vuejs2 - 如何在 Vuetify 中禁用文字值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56151522/

相关文章:

forms - 如何在付款流程运行时禁用 Stripe 表单字段?

vue.js - 在vuetify.js中将 header 设置为DatePicker

javascript - Vuetify,如何设置默认 Prop

javascript - 如何在 Vue.Js 的 v-for 循环中转义 'Duplicate keys detected'?

ios - 在 Swift 中更改 ViewController 后禁用任务栏?

javascript - 如何在 onclick 之后禁用一个按钮,但它在另一个函数中?

javascript - 如何将 for 循环中的当前项目传递给 vue.js 2 中的方法?

css - vuejs删除列表项时的动画问题

javascript - nuxtjs 以编程方式修改 head 标签

当输入字段的数量不恒定时,Vue.js如何从输入字段收集值