在v-select中自定义项目文本

Cla*_*ark 26 vuetify.js

请告诉我,如果我们可以自定义item-textv-select

我想自定义每个项目v-select,如下所示:

:item-text="item.name - item.description"
Run Code Online (Sandbox Code Playgroud)

Too*_*doo 54

是的,您可以scoped slot按照文档中的描述使用并提供template.

对于v-select你有两个scoped slot:

  • selection:描述v-select在选择时应如何呈现项目
  • item:描述v-select打开时如何呈现项目

它看起来像这样:

<v-select> // Don't forget your props
  <template slot="selection" slot-scope="data">
    // HTML that describe how select should render selected items
    {{ data.item.name }} - {{ data.item.description }}
  </template>
  <template slot="item" slot-scope="data">
    // HTML that describe how select should render items when the select is open
    {{ data.item.name }} - {{ data.item.description }}
  </template>
</v-select>
Run Code Online (Sandbox Code Playgroud)

CodePen有一个复杂的例子

关于V-Select中的Scoped Slot的Vuetify Doc


编辑V1.1.0 +:这些插槽也可用于新组件v-autocompletev-combobox继承v-select.

  • 从vue 2.6开始,应为&lt;template v-slot:item =“ data”&gt;` (3认同)
  • 救了我的一天:) (2认同)
  • 拯救了我的一天(2) (2认同)
  • `template` 标签必须同时具有 `slot` 和 `slot-scope` 属性。这对我来说并不明显。 (2认同)
  • 你可以这样做:``` &lt;template v-slot:item="data"&gt; &lt;v-list-item-action&gt; &lt;v-icon v-if="data.attrs.inputValue"&gt;check_box&lt;/ v-icon&gt; &lt;v-icon v-else&gt;check_box_outline_blank&lt;/v-icon&gt; &lt;/v-list-item-action&gt; &lt;v-list-item-content&gt; &lt;v-list-item-title&gt; {{ 数据.item.text }} - {{ data.item.description }} &lt;/v-list-item-title&gt; &lt;/v-list-item-content&gt; &lt;/template&gt; `` (2认同)

Moh*_*sen 42

速记:

:item-text="item => item.name +' - '+ item.description"
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我们也可以将其写为 ```:item-text="item =&gt;`${item.name} - ${item.description}`" ``` (10认同)

br.*_*br. 15

插槽会移除焦点上的自动选择.

item-text tye可以是: string | array | function

然后我们可以做:

:item-text="text"
Run Code Online (Sandbox Code Playgroud)

methods: {
  text: item => item.name + ' — ' + item.description
}
Run Code Online (Sandbox Code Playgroud)

  • 问题是:数组类型是什么意思? (2认同)

Mar*_*ius 8

这是一个简单的以下代码示例:

<template>
<v-select
  label='Names'
  v-model='name'
  :items='names'
  item-value='id'
  item-text='name'
  return-object
>
  <template slot='selection' slot-scope='{ item }'>
    {{ item.name }} - {{ item.age }}
  </template>
  <template slot='item' slot-scope='{ item }'>
    {{ item.name }} - {{ item.age }}
  </template>
</v-select>
</template>

<script> 
export default {
  data: () => ({
    names:[
      {id: 1, name: 'Paul', age: 23},
      {id: 2, name: 'Marcelo', age: 15},
      {id: 3, name: 'Any', age: 30},
    ]
  })
}   
</script>
Run Code Online (Sandbox Code Playgroud)

以下是参考:https : //vuetifyjs.com/en/components/autocompletes#advanced-slots