Rumah  >  Soal Jawab  >  teks badan

VSelect - Select tidak berfungsi dengan slot 'projek' tersuai dalam Vuetify 3

<p>Saya menggunakan VSelect daripada Vuetify 3 dalam aplikasi Vue 3 saya dan saya cuba menggunakan slot item. Tetapi pilihan VSelect saya menjadi tidak boleh dipilih</p> <p>Saya mempunyai elemen VSelect ini: </p> <pre class="brush:php;toolbar:false;"><v-select v-model="tag" :items="tag" varian="solo" label="Tag" <template #item="{ item }" <v-senarai> <v-list-item :title="item.title" </v-list> </template> </v-select></pre> <p>Teg dan teg dalam data:</p> <pre class="brush:php;toolbar:false;">tag: null, tag: [ { tajuk: 'contoh1', nilai: 0 }, { tajuk: 'contoh2', nilai: 1 }, ],</pre> <p>Dalam output, saya memilih pilihan dengan pilihan, tetapi pilihan itu tidak boleh dipilih: </p> <p>Jadi bagaimana untuk menetapkan slot "item" menggunakan pilihan boleh dipilih untuk komponen VSelect dalam Vuetify 3? </p>
P粉166779363P粉166779363400 hari yang lalu489

membalas semua(1)saya akan balas

  • P粉786800174

    P粉7868001742023-08-27 00:44:36

    Panggil balik props 对象包含一个 onClick dihantar ke slot, anda perlu mengikatnya agar pemilihan berfungsi:

    <template #item="{ item, props: { onClick } }" >
      <v-list-item :title="item.title" @click="onClick"/>
    </template>
    

    Dokumentasi agak jarang buat masa ini, jenis yang diberikan ialah Record。在 Vuetify 3.4 中,其他值是 keytitlevalueref (rujukan templat dari asas) VVritualScroll digunakan untuk mengemas kini ketinggian bar skrol.

    Apabila menggunakan komponen dengan atribut title (contohnya VListItemtitle 属性的组件时(例如 VListItem),您可以绑定整个 props), anda boleh mengikat keseluruhan objek props:

    <template #item="{ props }" >
      <v-list-item v-bind="props"/>
    </template>
    

    (By the way, #item 插槽已将其内容渲染到 v-list sederhana, tak perlu bungkus semula)

    Ini klip:

    const { createApp, ref } = Vue;
    const { createVuetify } = Vuetify
    const vuetify = createVuetify()
    createApp({
      setup(){
        
        return {
           tag: ref(null),
            tags: [
              { title: 'example1', value: 0 },
              { title: 'example2', value: 1 },
            ],
        }
      }
    }).use(vuetify).mount('#app')
    <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/vuetify@3.1.6/dist/vuetify.min.css" />
    <link href="https://cdn.jsdelivr.net/npm/@mdi/font@5.x/css/materialdesignicons.min.css" rel="stylesheet">
    <div id="app" class="d-flex justify-center">
      <v-app>
        <div>
        <v-select
          style="width: 300px;"
          v-model="tag"
          :items="tags"
          variant="solo"
          label="Tags"
        >
          <template #item="{ item, props: {onClick, title, value} }" >
            <v-list-item :title="item.title"  @click="onClick"/>
          </template>
        </v-select>
          
          Selected: {{tag}}
        </div>
      </v-app>
    </div>
    <script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vuetify@3.1.6/dist/vuetify.min.js"></script>

    balas
    0
  • Batalbalas