Vuetify Autocomplete, item-slot , 保持字符高亮

Pao*_*der 3 vue.js vuetify.js

如何保持字符的默认突出显示替换项目的作用域槽

https://vuetifyjs.com/en/components/autocompletes#scopedSlots

默认 , 将输出一个 v-list,其中输入中的每个字符在输出中都被“高亮显示”。

<v-autocomplete
                    v-model="model"
                    :items="items"
                    :loading="isLoading"
                    :search-input.sync="SomeApiDataCall"
                    item-text="name"
                    item-value="id"
                   >

            </v-autocomplete>
Run Code Online (Sandbox Code Playgroud)

自定义范围槽 :我想更改列表的设计,但想保留“突出显示”的输出

    <v-autocomplete
                            v-model="model"
                            :items="items"
                            :loading="isLoading"
                            :search-input.sync="SomeApiDataCall"
                            item-text="name"
                            item-value="id"
                           >

        <template  slot="item"
                   slot-scope="{ item, tile }"
         >   
            <v-list-tile-content  >
                 <!--the html output needs to be highlighted-->  
                <v-list-tile-title v-html="item.name"></v-list-tile-title>
            </v-list-tile-content>

         </template>

</v-autocomplete>
Run Code Online (Sandbox Code Playgroud)

VAutocomplete 导入 > VSelect,导入 > VSelectList

VSelectList 有一个名为genFilteredText的函数

https://github.com/vuetifyjs/vuetify/blob/dev/src/components/VSelect/VSelectList.js#L112

那会做我想做的。如何在自定义 scoped-slot 中实现这一点?

谢谢。

Pao*_*der 9

slot-scope Item 也可以接收“parent”。之后,您可以访问其上的任何方法。

<template
    slot="item"
    slot-scope="{ parent, item, tile }"
>
    <v-list-tile-content>
        <!-- Highlight output item.name -->  
        <v-list-tile-title
            v-html="parent.genFilteredText(item.name)"
        > 
        </v-list-tile-title>
    </v-list-tile-content>
</template>
Run Code Online (Sandbox Code Playgroud)


And*_*dre 5

我对 vue 很陌生,我花了一段时间才将这个问题/解决方案翻译成新的 Slots 语法。

对于也在使用新v-slot:item="data"语法的任何人,您可以按如下方式接收父级:

<template v-slot:item="{ parent, item }">
    <v-list-tile-content  >
         <!--Highlight output item.name-->  
         <v-list-tile-title 
              v-html="`${parent.genFilteredText(item.name)}`"
         ></v-list-tile-title>
    </v-list-tile-content>
</template>
Run Code Online (Sandbox Code Playgroud)