当前位置:首页 > VUE

vue公共按钮实现

2026-01-16 07:06:29VUE

Vue 公共按钮组件实现方法

封装基础按钮组件

创建 Button.vue 文件,定义基础按钮模板和样式:

<template>
  <button 
    :class="['base-button', type, size, { 'is-disabled': disabled }]"
    :disabled="disabled"
    @click="handleClick"
  >
    <slot></slot>
  </button>
</template>

<script>
export default {
  name: 'BaseButton',
  props: {
    type: {
      type: String,
      default: 'default',
      validator: value => ['default', 'primary', 'danger', 'warning'].includes(value)
    },
    size: {
      type: String,
      default: 'medium',
      validator: value => ['small', 'medium', 'large'].includes(value)
    },
    disabled: Boolean
  },
  methods: {
    handleClick(e) {
      this.$emit('click', e)
    }
  }
}
</script>

<style scoped>
.base-button {
  border-radius: 4px;
  cursor: pointer;
  transition: all 0.3s;
}
/* 不同类型样式 */
.primary {
  background: #1890ff;
  color: white;
}
/* 尺寸样式 */
.small { padding: 5px 10px; }
.medium { padding: 8px 15px; }
.large { padding: 12px 20px; }
.is-disabled {
  opacity: 0.6;
  cursor: not-allowed;
}
</style>

全局注册组件

main.js 中全局注册:

import Vue from 'vue'
import BaseButton from '@/components/Button.vue'

Vue.component('BaseButton', BaseButton)

组件使用方式

在任意组件中直接使用:

<template>
  <div>
    <base-button type="primary" @click="handleSubmit">提交</base-button>
    <base-button type="danger" size="small" :disabled="isDisabled">删除</base-button>
  </div>
</template>

扩展功能实现

添加图标支持:

<template>
  <button class="base-button">
    <i v-if="icon" :class="['icon', icon]"></i>
    <slot></slot>
  </button>
</template>

<script>
export default {
  props: {
    icon: String
  }
}
</script>

主题定制方案

通过 SCSS 变量实现主题切换:

// variables.scss
$primary-color: #1890ff;
$danger-color: #ff4d4f;

// button.scss
.primary {
  background: $primary-color;
}
.danger {
  background: $danger-color;
}

单元测试示例

使用 Jest 测试组件行为:

import { shallowMount } from '@vue/test-utils'
import BaseButton from '@/components/Button.vue'

describe('BaseButton', () => {
  it('emits click event', () => {
    const wrapper = shallowMount(BaseButton)
    wrapper.trigger('click')
    expect(wrapper.emitted('click')).toBeTruthy()
  })
})

按需加载配置

配合 babel-plugin-component 实现按需引入:

vue公共按钮实现

// babel.config.js
module.exports = {
  plugins: [
    [
      'component',
      {
        libraryName: 'element-ui',
        styleLibraryName: 'theme-chalk'
      }
    ]
  ]
}

标签: 按钮vue
分享给朋友:

相关文章

vue实现排序

vue实现排序

Vue 实现排序的方法 在 Vue 中实现排序可以通过多种方式完成,以下是一些常见的方法: 使用计算属性排序数组 计算属性非常适合对数据进行排序,因为它会在依赖的数据变化时自动更新。以下是一个示例:…

vue实现 hover

vue实现 hover

实现 Vue 中的 hover 效果 在 Vue 中实现 hover 效果可以通过多种方式完成,以下是常见的几种方法: 使用 CSS 伪类 最简单的方式是直接使用 CSS 的 :hover 伪类,无…

vue 实现评分

vue 实现评分

Vue 实现评分功能 在 Vue 中实现评分功能可以通过多种方式完成,包括使用第三方组件库或自定义实现。以下是两种常见的方法: 使用第三方组件库(如 Element UI) Element UI 提…

vue实现pc

vue实现pc

Vue 实现 PC 端应用开发 Vue.js 是一个流行的前端框架,适用于构建 PC 端 Web 应用。以下是关键步骤和最佳实践: 项目初始化 使用 Vue CLI 或 Vite 创建项目:…

vue实现选人

vue实现选人

实现选人功能的基本思路 在Vue中实现选人功能通常涉及以下核心环节:数据绑定、用户交互处理、状态管理以及界面渲染。以下是具体实现方法: 数据准备与组件结构 创建包含人员信息的数组,通常从API获取或…

vue事件实现

vue事件实现

Vue 事件实现方法 在Vue中,事件处理是通过v-on指令或@简写来实现的。以下是几种常见的事件处理方式: 使用v-on指令绑定事件 <button v-on:click="handleC…