最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

vuejs3 - Add an image in the checkbox label on an autocomplete - Stack Overflow

programmeradmin2浏览0评论

I have a form with a that allows the user to select up to 2 options. I want to customize the options that are displayed in the dropdown menu. This is my code now:

    <v-autocomplete
      :items="filteredItems"
      v-model="selectedItems"
      item-title="name"
      chips
      multiple
      return-object
      closable-chips
    >
      <template v-slot:chip="{ props, item }">
        <v-chip
          v-bind="props"
          :prepend-avatar="item.raw.image"
          :title="item.raw.name"
        ></v-chip>
      </template>

      <template v-slot:default="{ item }">
          <v-checkbox>
            <template v-slot:label>
              <v-avatar size="20">
                <img
                  :src="item.raw.image"
                  alt="item.name"
                  width="20"
              /></v-avatar>
            </template>
          </v-checkbox>
      </template>

    </v-autocomplete>

I want to display a checkbox for each option, along with an image and a label. However, the image is not displaying correctly in my current code. The checkbox status must be synchronized with the selected options. I've tried a lot of things but I can't make both work (the checkbox and the image).

I have a form with a that allows the user to select up to 2 options. I want to customize the options that are displayed in the dropdown menu. This is my code now:

    <v-autocomplete
      :items="filteredItems"
      v-model="selectedItems"
      item-title="name"
      chips
      multiple
      return-object
      closable-chips
    >
      <template v-slot:chip="{ props, item }">
        <v-chip
          v-bind="props"
          :prepend-avatar="item.raw.image"
          :title="item.raw.name"
        ></v-chip>
      </template>

      <template v-slot:default="{ item }">
          <v-checkbox>
            <template v-slot:label>
              <v-avatar size="20">
                <img
                  :src="item.raw.image"
                  alt="item.name"
                  width="20"
              /></v-avatar>
            </template>
          </v-checkbox>
      </template>

    </v-autocomplete>

I want to display a checkbox for each option, along with an image and a label. However, the image is not displaying correctly in my current code. The checkbox status must be synchronized with the selected options. I've tried a lot of things but I can't make both work (the checkbox and the image).

Share Improve this question asked Jan 20 at 10:09 FaroFaro 111 silver badge1 bronze badge 2
  • What is not working precisely? Do you have an error or something in the DOM that could help us narrow down the issue? – kissu Commented Jan 20 at 10:09
  • No errors, but the image do not appear in the dropdown menu. The one in the chip works just fine, but in the dropdown there is just the checkbox and the default label text. – Faro Commented Jan 20 at 10:31
Add a comment  | 

1 Answer 1

Reset to default 1

VAutocomplete does not have a default slot, you are looking for the item slot.

According to the docs, the item slot fills a v-list, so the first child should be a v-list-item.


This gives you something like this:

<v-autocomplete ...>
  <template v-slot:item="{ item, props }">

    <v-list-item v-bind="props">
      <template #prepend>

        <v-checkbox hide-details>
          <template v-slot:label>
            <v-avatar size="20">
              <img :src="item.raw.image" alt="item.name" width="20"/>
            </v-avatar>
          </template>
        </v-checkbox>

      </template>
    </v-list-item>

  </template>
</v-autocomplete>

To get the checked state to work, you can just check the list of selected items:

<v-checkbox
  :model-value="selectedItems.some(i => i.name === item.raw.name )"
>

The click event itself is handled by the list item. You could bind the onClick from the slot props to the checkbox, but I think this will not work as expected.


Here it is in a playground

发布评论

评论列表(0)

  1. 暂无评论