You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vue组件中切换Heroicons的轮廓与实心版本?

在Vue中切换Heroicons的轮廓与实心BookmarkIcon

解决这个问题的核心是重命名导入的组件,避免同名冲突,再根据激活状态动态渲染对应版本的图标。


步骤1:重命名导入两个图标组件

因为两个BookmarkIcon来自不同的路径,导入时使用as关键字给它们起不同的别名:

import { BookmarkIcon as BookmarkOutlineIcon } from "@heroicons/vue/24/outline"
import { BookmarkIcon as BookmarkSolidIcon } from "@heroicons/vue/24/solid"

步骤2:根据激活状态切换渲染

假设你用isActive变量控制导航项的激活状态,下面提供两种常用的实现方式:

方式一:使用v-if/v-else条件渲染

<template>
  <nav>
    <div 
      :class="{ active: isActive }" 
      @click="isActive = !isActive"
    >
      <!-- 未激活时显示轮廓版 -->
      <BookmarkOutlineIcon v-if="!isActive" class="w-6 h-6" />
      <!-- 激活时显示实心版 -->
      <BookmarkSolidIcon v-else class="w-6 h-6" />
      <span>收藏</span>
    </div>
  </nav>
</template>

<script setup>
import { ref } from 'vue'
import { BookmarkIcon as BookmarkOutlineIcon } from "@heroicons/vue/24/outline"
import { BookmarkIcon as BookmarkSolidIcon } from "@heroicons/vue/24/solid"

// 控制激活状态的变量
const isActive = ref(false)
</script>

<style scoped>
.active {
  color: #3b82f6; /* 示例:激活态的文本/图标颜色 */
}
</style>

方式二:使用动态组件<component>

如果需要切换的状态较多,这种方式代码更简洁:

<template>
  <nav>
    <div 
      :class="{ active: isActive }" 
      @click="isActive = !isActive"
    >
      <!-- 根据isActive动态绑定组件 -->
      <component 
        :is="isActive ? BookmarkSolidIcon : BookmarkOutlineIcon" 
        class="w-6 h-6" 
      />
      <span>收藏</span>
    </div>
  </nav>
</template>

<script setup>
import { ref } from 'vue'
import { BookmarkIcon as BookmarkOutlineIcon } from "@heroicons/vue/24/outline"
import { BookmarkIcon as BookmarkSolidIcon } from "@heroicons/vue/24/solid"

const isActive = ref(false)
</script>

内容的提问来源于stack exchange,提问作者user19540948

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:40:24