当前位置:首页 > VUE

vue实现计算器

2026-01-21 23:17:58VUE

Vue 实现计算器的方法

使用 Vue 实现计算器可以充分利用其响应式数据和组件化特性。以下是一个简单的实现方案:

创建 Vue 项目

使用 Vue CLI 或 Vite 初始化项目:

vue实现计算器

npm init vue@latest calculator
cd calculator
npm install

核心代码实现

src/App.vue 或单独组件中实现:

vue实现计算器

<template>
  <div class="calculator">
    <div class="display">{{ current || '0' }}</div>
    <div class="buttons">
      <button @click="clear">C</button>
      <button @click="sign">+/-</button>
      <button @click="percent">%</button>
      <button @click="divide" class="operator">÷</button>

      <button @click="append('7')">7</button>
      <button @click="append('8')">8</button>
      <button @click="append('9')">9</button>
      <button @click="times" class="operator">×</button>

      <button @click="append('4')">4</button>
      <button @click="append('5')">5</button>
      <button @click="append('6')">6</button>
      <button @click="minus" class="operator">-</button>

      <button @click="append('1')">1</button>
      <button @click="append('2')">2</button>
      <button @click="append('3')">3</button>
      <button @click="add" class="operator">+</button>

      <button @click="append('0')" class="zero">0</button>
      <button @click="dot">.</button>
      <button @click="equal" class="operator">=</button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      current: '',
      previous: null,
      operator: null,
      operatorClicked: false
    }
  },
  methods: {
    clear() {
      this.current = '';
    },
    sign() {
      this.current = this.current.charAt(0) === '-' ? 
        this.current.slice(1) : '-' + this.current;
    },
    percent() {
      this.current = parseFloat(this.current) / 100;
    },
    append(number) {
      if (this.operatorClicked) {
        this.current = '';
        this.operatorClicked = false;
      }
      this.current = `${this.current}${number}`;
    },
    dot() {
      if (this.current.indexOf('.') === -1) {
        this.append('.');
      }
    },
    setPrevious() {
      this.previous = this.current;
      this.operatorClicked = true;
    },
    divide() {
      this.operator = (a, b) => a / b;
      this.setPrevious();
    },
    times() {
      this.operator = (a, b) => a * b;
      this.setPrevious();
    },
    minus() {
      this.operator = (a, b) => a - b;
      this.setPrevious();
    },
    add() {
      this.operator = (a, b) => a + b;
      this.setPrevious();
    },
    equal() {
      this.current = `${this.operator(
        parseFloat(this.previous), 
        parseFloat(this.current)
      )}`;
      this.previous = null;
    }
  }
}
</script>

<style>
.calculator {
  width: 300px;
  margin: 50px auto;
  font-size: 24px;
}
.display {
  background: #f0f0f0;
  padding: 15px;
  text-align: right;
  border: 1px solid #ddd;
  border-radius: 5px 5px 0 0;
}
.buttons {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-gap: 1px;
}
button {
  padding: 20px;
  background: #fff;
  border: 1px solid #ddd;
  cursor: pointer;
}
button:hover {
  background: #eee;
}
.operator {
  background: #f0f0f0;
}
.zero {
  grid-column: span 2;
}
</style>

功能扩展建议

  1. 增加历史记录功能,存储之前的计算结果
  2. 实现科学计算器功能(三角函数、对数等)
  3. 添加键盘支持,允许用户使用键盘输入
  4. 实现主题切换功能(深色/浅色模式)
  5. 添加动画效果提升用户体验

部署与测试

运行开发服务器:

npm run dev

构建生产版本:

npm run build

这个实现包含了基本计算功能,包括加减乘除、百分比、正负号切换等操作。通过 Vue 的响应式特性,界面会自动更新计算结果。

标签: 计算器vue
分享给朋友:

相关文章

vue实现导航栏切图

vue实现导航栏切图

Vue 实现导航栏切图 使用 Vue Router 实现基础导航 在 Vue 项目中,可以通过 Vue Router 实现导航栏的路由切换。创建一个导航栏组件,并在其中使用 <router-li…

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

ssh vue 实现

ssh vue 实现

使用SSH连接Vue项目部署的服务器 在Vue项目开发或部署过程中,可能需要通过SSH连接到远程服务器进行配置或维护。以下是实现SSH连接并部署Vue项目的关键步骤: 生成SSH密钥对 在本地终端运…

vue实现分类

vue实现分类

Vue实现分类功能的方法 使用v-for和计算属性 通过计算属性对数据进行分类处理,结合v-for渲染分类后的列表。示例代码: <template> <div>…

vue权限实现

vue权限实现

Vue 权限实现方案 基于路由的权限控制 通过路由守卫实现权限验证,在路由配置中添加meta字段标记权限要求。在router.beforeEach中检查用户权限与路由要求的匹配情况。 // rout…

vue实现socket

vue实现socket

Vue 中实现 WebSocket 通信 在 Vue 项目中实现 WebSocket 通信可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种常…