Vue3 按钮切换示例(启动 / 关闭互斥显示)

Vue3 按钮切换示例(启动/关闭互斥显示)

我给你写一个最简、可直接运行的 Vue3 示例:

  • 只有启动关闭两个按钮
  • 永远只显示其中一个
  • 点击切换状态
  • 用 Vue3 组合式 API(<script setup>

完整代码

vue 复制代码
<template>
  <!-- 按钮容器 -->
  <div class="btn-box">
    <!-- 启动按钮:只有 isClosed 为 true 时显示 -->
    <button 
      v-if="isClosed" 
      @click="switchStatus"
      class="start-btn"
    >
      启动
    </button>

    <!-- 关闭按钮:只有 isClosed 为 false 时显示 -->
    <button 
      v-else 
      @click="switchStatus"
      class="stop-btn"
    >
      关闭
    </button>
  </div>
</template>

<script setup>
import { ref } from 'vue'

// 状态:true = 显示启动按钮 | false = 显示关闭按钮
const isClosed = ref(true)

// 切换状态函数
const switchStatus = () => {
  isClosed.value = !isClosed.value
}
</script>

<style scoped>
.btn-box {
  margin: 20px;
}
.start-btn {
  padding: 8px 16px;
  background: #409eff;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}
.stop-btn {
  padding: 8px 16px;
  background: #f56c6c;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}
</style>

核心逻辑说明

  1. 状态控制

    • isClosed 响应式变量控制显示哪个按钮
    • 初始值 true → 默认显示启动按钮
  2. 互斥显示

    • v-if="isClosed" → 为 true 显示启动
    • v-else → 显示关闭
    • 两个按钮永远只出现一个
  3. 点击切换

    • 点击任意按钮触发 switchStatus()
    • 执行 isClosed.value = !isClosed.value 取反状态
    • 视图自动更新

效果

  • 页面刚打开:显示 蓝色启动按钮
  • 点击启动按钮:按钮变成 红色关闭按钮
  • 点击关闭按钮:变回 蓝色启动按钮

总结

  1. 用一个 ref 变量控制按钮显示隐藏
  2. v-if/v-else 实现按钮互斥展示
  3. 点击取反状态值即可完成切换,简单高效
相关推荐
用户938515635072 小时前
从 Prompt 到 Harness:AI 工程化的三年跃迁与实战解码
javascript·人工智能
木木剑光2 小时前
我开源了一个 React 组件库,沉淀了多个高频组件和实用 Hooks
前端·javascript·react.js
竹林8183 小时前
Solana DApp 开发踩坑实录:从零用 @solana/web3.js 实现链上数据查询与交易签名
前端·javascript
用户2136610035723 小时前
VueRouter进阶-动态路由与嵌套路由
前端·vue.js
梯度不陡3 小时前
Signal #17:Agent 开始进入组织系统
前端·javascript
胡萝卜术3 小时前
从暴力到Z字形消元:力扣240「搜索二维矩阵II」的降维打击之路
前端·javascript·面试
云浪4 小时前
前端二进制数组完全指南:ArrayBuffer、TypedArray、DataView 一次讲透
前端·javascript
铁皮饭盒5 小时前
26年bunjs, elysia+pg一把梭, redis都省了
前端·javascript·后端
kyriewen18 小时前
别再对着 TypeScript 报错发呆了:我把 10 个最常见的红色波浪线翻译成了人话
前端·javascript·typescript
free3519 小时前
从 0 实现一个 Tiny JavaScript VM:项目架构拆解
javascript