vue.js 如何将v-avatar传递给multiselect v-select的chips子节点?

pqwbnv8z  于 2023-03-24  发布在  Vue.js
关注(0)|答案(1)|浏览(197)

我想实现这样的目标:

我做到了:

<template>
  <div>
    <label class="form-label">{{ label }}</label>
    <v-select
      v-model="selecteds"
      item-title="user_name"
      item-value="id"
      :items="items"
      multiple
    >
      <template #selection="data">
        <v-chip
          :key="data.item.id"
          closable
          :model-value="data.selected"
          :disabled="data.deleted_at"
        >
          <template #prepend>
            <v-avatar size="32" image="https://i.pravatar.cc/64" />
          </template>
          {{ data.item.title }}
        </v-chip>
      </template>
    </v-select>

    <input
      v-for="selected in selecteds"
      :key="selected.id"
      type="hidden"
      :name="label + '[]'"
      :value="selected.id"
    >
  </div>
</template>

但是这个实现有两个问题,当我关闭一个chip时,v-select打开,并且chip项不会从v-select的选中项中删除。
我也试过这个:

<template>
  <div>
    <label class="form-label">{{ label }}</label>
    <v-select
      v-model="selecteds"
      item-title="user_name"
      item-value="id"
      :items="items"
      chips
      closable-chips
      multiple
    >
      <template v-slot:prepend>
        <v-avatar size="32" image="https://i.pravatar.cc/64" />
      </template>
    </v-select>

    <input
      v-for="selected in selecteds"
      :key="selected.id"
      type="hidden"
      :name="label + '[]'"
      :value="selected.id"
    >
  </div>
</template>

这个实现如预期的那样工作,但是头像没有进入芯片的prepend插槽,而是进入了v-select。我希望头像在芯片中。有什么提示吗?

iyr7buue

iyr7buue1#

很难判断它是否有意与Vuetify 3或它实际上需要工作,因为它的记录如此之少,也没有例子,但我得到了这个工作省略芯片 prop 上的选择组件和实现芯片与插槽。

<v-select
    v-model="items"
    :items="config"  
    item-title="name"
    item-value="name"                                         
    label="Select"
    multiple
    return-object            
>
    <template v-slot:selection="{ item, index, props }">               
        <v-chip closable :prepend-avatar="item.raw.img" v-bind="props" @click:close="update(index)">{{item.raw.name}}</v-chip>   
    </template>
    <template v-slot:item="{ item, props }">
        <v-list-item :prepend-avatar="item.raw.img" v-bind="props"></v-list-item>
    </template>
</v-select>

示例:https://codepen.io/alexpetergill/pen/wvEYyNw/db0226bfec45499bd649878764c9b3df

相关问题