javascript Vuetify:v-list-item,使用v-slot:prepend时无空格

edqdpe6u  于 2023-10-14  发布在  Java
关注(0)|答案(1)|浏览(129)

我目前正在使用v-navigation-drawer创建一个侧边导航。我的大多数项目使用图标,但我想创建一些自定义行为了。遗憾的是,v-slot:title中的标题与使用prepend-icon的v-list-item中的标题不一致。我如何才能做到这一点。

<v-navigation-drawer
        location="left"
        width="250"
        permanent
    >
      <v-list>
        <v-list-item prepend-icon="mdi-account" title="Profile" to="/profile"></v-list-item>
        <v-list-item prepend-icon="mdi-email-fast" title="Feedback" to="/feedback"></v-list-item>

        <v-list-item>
          <template v-slot:prepend>
                <v-progress-circular
                    model-value="30"
                    size="25"
                    color="deep-orange-lighten-2"
                ></v-progress-circular>
          </template>

          <template v-slot:title>
                Progress
          </template>
        </v-list-item>
      </v-list>
    </v-navigation-drawer>
chy5wohz

chy5wohz1#

为了解决这样的问题,我将检查DOM并比较标准的prepend元素和v-slot前置元素。当使用v-slot时,所有内容都被替换,所以关键是要弄清楚当使用vs.不使用V形槽。

安装

标准的prepend元素看起来像这样:

<div class="v-list-item__prepend">
  <i class="mdi-email-fast mdi v-icon notranslate v-theme--light v-icon--size-default" aria-hidden="true" density="default"></i>
  <div class="v-list-item__spacer"></div>
</div>

prepend v-slot看起来更像这样:

<div class="v-list-item__prepend">
  <div class="v-progress-circular v-progress-circular--visible v-theme--light text-deep-orange-lighten-2" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="30" style="width: 25px; height: 25px;">
    <svg>...</svg>
  </div>
  <div class="v-list-item__spacer"></div>
</div>

<i>元素中的类添加到<v-progress-circular>中可以解决间距问题。不过,这样做还可以添加其他样式。通过研究CSS或者一次删除一个类,我们可以将其缩小到只需要“v-icon”类的v-progress-circular。
这个类的实际效果是在v-list-item__spacer div上设置width: 32px。如果你在你的自定义v-slot中检查v-list-item__spacer,你会看到宽度是0,直到你添加“v-icon”类。你可能不想要所有其他的样式都带有“v-icon”,所以你可以离开这个类,只应用32 px。
为此,请添加一个自定义类,例如“customPrepend”到你的一个v-list-item,这样你就可以为必要的CSS提供一个选择器。

解决方案

<v-list-item class="customPrepend">
  <template #prepend>
    <v-progress-circular
      model-value="30"
      size="25"
      color="deep-orange-lighten-2"
    ></v-progress-circular>
  </template>
  <template #title> Progress </template>
</v-list-item>
<style scoped>
.customPrepend :deep(.v-list-item__prepend .v-list-item__spacer) {
  width: 32px;
}
</style>

Vuetify Playground示例

相关问题