更改 v-select 中筹码的样式和颜色

Change style and colors of chips in v-select

如何更改 v-select 中筹码的颜色和样式?

我有这样的代码:

<v-select
  v-model="value"
  :items="roles"
  :menu-props="{ top: true, offsetY: true }"
  small-chips
  label="Roles"
  multiple
  hint="Select the role"
  persistent-hint
>
</v-select>

如何将筹码更改为样式 label 和颜色 blue

您可能需要 selection 插槽。

<v-select
  v-model="value"
  :items="roles"
  :menu-props="{ top: true, offsetY: true }"
  small-chips
  label="Roles"
  multiple
  hint="Select the role"
  persistent-hint>
  <template #selection="{ item }">
    <v-chip color="blue">{{item.name}}</v-chip>
  </template>
</v-select>

其中 item.name 将取决于 roles 的这些单独项目。

如果我们使用selection slot来定制我们想要的芯片,就像@YomS。如上所示,我们不能使用 chipsdeletable-chips 道具使该筹码可删除。

对于还需要在选择槽中实施 deletable-chips 的任何人,这里是我的代码片段:

<template>
    <v-select
          v-model="styleSelection" // Linking that v-select to one array
    
          clearable
          multiple
          :items="travelStyles"
          label="Travel Style"
        >
          <template #selection="{ item }">
            <v-chip
              
              color="primary"

              close
              @click:close="deleteChip(item, styleSelection)" // call a method deleteChip

              >{{ item }}</v-chip
            >
          </template>
        </v-select>
</template>

<script>
  export default {
    data: () => ({
      styleSelection: [],
      travelStyles: [
        'Discovery',
        'Family',
        'In-depth Cultural',
        'Historical',
        'Food & Culinary',
        'Adventure',
        'Beach',
        'Hiking & Trekking',
        'Bicycle',
        'Sightseeing',
        'Boat',
        'River Cruise',
        'Ocean Cruise',
      ],

    }),
    methods: {
      deleteChip(itemNeedToRemove, array) {
        for (let i = 0; i < array.length; i += 1) {
          if (array[parseInt(i, 10)] === itemNeedToRemove) {
            array.splice(i, 1);
          }
        }
      },
    },
  };
</script>

除了选择 v-select,它还适用于自动完成 v-autocompletes,代码段完全相同。

如果你想在V-autocompletes中自定义筹码颜色并使其可删除,你可以看下面的代码:

      <v-autocomplete
        v-model="citySelection"
        clearable
        multiple
        :items="city"
        label="Where do you want to go?"
        :search-input.sync="search"
        @change="search = ''"
      >
        <template #selection="{ item }">
          <v-chip
            close
            color="primary"
            @click:close="deleteChip(item, citySelection)"
            >{{ item }}</v-chip
          >
        </template>
      </v-autocomplete>

我站在你的立场上,我认为,如果你需要可删除的筹码,仅仅为了改变颜色而重新实现删除筹码的功能是一种矫枉过正的做法。

由于您的目标是风格化,我建议您使用简单的 scss 解决方案:

<template>
 <v-select
   class="mySelect"
   v-model="value"
   :items="roles"
   :menu-props="{ top: true, offsetY: true }"
   small-chips
   label="Roles"
   multiple
   hint="Select the role"
   persistent-hint
   deletable-chips
 >
 </v-select>
</template>
<script>
export default {
 data() {
   return {
     roles: ['role1', 'role2'],
   }
 },
}
</script>
<style lang="scss" scoped>
 .mySelect::v-deep .v-chip {

   /* chip background color */
   background-color: var(--v-primary-base);
   
   /* chip text color */
   color: white;

   /* chip X color */
   button {
     color: white;
 }
}
</style>

注意 .mySelect::v-deep 选择器,它使规则能够应用于特定元素,即使是在范围样式块中。

编辑:

  • 采纳了 Andy 的建议
  • 在样式中添加了解释性注释
  • 删除了不必要的 !important
  • 在数据中添加了虚拟角色来做出答案 copy/paste 可测试