vue实现计算器封装

本文实例为大家分享了vue实现计算器封装代码,供大家参考,具体内容如下

前言:根据计算器可增添加减乘除的封装可扩展,大家请参照效果如下:

文件目录

我们导入了四个js包,在下面有源代码,当前计算器页只有一个valculator.vue文件。

valculator.vue:<html代码>

template>
  <div class="about">
    <h1>这是个计算器你信吗</h1>
    <van-cell-group type="text">
      <van-field
        οninput="value=value.replace(/[^\d+(+)+(-)+(*)]/g, '').replace(/^0{1,}/g,'')"
        v-model="inputValue"
        placeholder="请输入数字"
      />
    </van-cell-group>
    <div style="margin-top:20%">
      <van-grid clickable :column-num="4" :gutter="10">
        <van-grid-item @click="onclick(i)" v-for="(num, i) in dataNum" :key="i" :text="dataNum[i]" />
      </van-grid>
    </div>
  </div>
</template>

valculator.vue:《js方法》

<script>
// eslint-disable-next-line no-unused-vars
import { Field } from 'vant'
export default {
  data () {
    return {
      // 数字加减乘除数组
      dataNum: [
        '+',
        '-',
        '*',
        '/',
        '1',
        '2',
        '3',
        '< X',
        '4',
        '5',
        '6',
        '=',
        '7',
        '8',
        '9',
        '0'
      ],
      inputValue: '', // input当前显示值
      inputStorage: '', // input输入值存储
      calculator: '', // 解析拿到的值

      temporaryVariables1: '', // 存储临时计算拼接值1
      temporaryVariables2: '', // 存储临时计算拼接值2
      temporaryOperator: '' // 存储临时运算符
    }
  },
  methods: {
    // 点击事件
    onclick (index) {
      this.parsing(index) // 解析当前的值
      this.judge() // 判断进行运算
    },

    // 解析当前拿到的值
    parsing (index) {
      switch (index) {
        case 4:
          this.calculator = '1'
          break
        case 5:
          this.calculator = '2'
          break
        case 6:
          this.calculator = '3'
          break
        case 8:
          this.calculator = '4'
          break
        case 9:
          this.calculator = '5'
          break
        case 10:
          this.calculator = '6'
          break
        case 12:
          this.calculator = '7'
          break
        case 13:
          this.calculator = '8'
          break
        case 14:
          this.calculator = '9'
          break
        case 15:
          this.calculator = '0'
          break
        case 0:
          this.calculator = '+'
          break
        case 1:
          this.calculator = '-'
          break
        case 2:
          this.calculator = '*'
          break
        case 3:
          this.calculator = '/'
          break
        case 11:
          this.calculator = '='
          break
        case 7:
          this.calculator = 'X'
          this.Clear()
          break
        default:
          break
      }

      //   this.outValue = this.calculator;
      //   this.inputBox();
      //   console.log(this.calculator);
    },

    // 判断是哪个运算符
    judge () {
      if (this.calculator === '=') {
        this.equal()
      } else if (this.calculator === 'X') {
        this.Clear()
      } else {
        this.showOn() // 显示当前的值
        this.calculation() // 计算当前的值
      }
    },

    // 计算当前的值
    calculation () {
      // 如果为空表示当前为第一个运算符,否则开始计算

      const vae = this.isNumber(this.calculator) // 判断当前输入值是否为数字
      if (this.temporaryOperator === '') {
        if (vae === false) {
          this.temporaryOperator = this.calculator // 存储当前计算值
        } else {
          this.temporaryVariables1 += this.calculator // 计算的值:加减触发前拼接的值
        }
      } else {
        if (vae === false) {
          this.temporaryVariables1 = this.Retrieval.retrieval(
            this.temporaryOperator,
            this.temporaryVariables1,
            this.temporaryVariables2
          ) // 如果当前有输入运算法调取加减乘除

          this.assignmentConversion() // 清空第二个数
          this.temporaryOperator = this.calculator // 计算完后保留当前的运算符
        } else {
          this.temporaryVariables2 += this.calculator // 继续第二个拼接
        }
      }
    },

    // 判断是否为数字:“12.3”等都为true, “哈哈”、“12.33”等都为false
    isNumber (val) {
      var regPos = /^\d+(\.\d+)?$/ // 非负浮点数
      var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/ // 负浮点数
      if (regPos.test(val) || regNeg.test(val)) {
        return true
      } else {
        return false
      }
    },

    // 等于
    equal () {
      this.temporaryVariables1 = this.Retrieval.retrieval(
        this.temporaryOperator,
        this.temporaryVariables1,
        this.temporaryVariables2
      ) // 调取加减乘除
      this.assignmentConversion() // 清空第二个数
      this.inputValue = this.temporaryVariables1 // 将计算后的值显示在屏幕上
      this.inputStorage = '' // 清空之前存储的值
    },

    // 清空第二个数
    assignmentConversion () {
      this.temporaryVariables2 = '' // 第二个清空用来再次保留
    },

    // 清除显示的数据
    Clear () {
      this.inputValue = '' // 显示的值
      this.inputStorage = '' // input输入值存储
      this.calculator = '' // 解析拿到的值

      this.temporaryVariables1 = '' // 存储临时计算拼接值1
      this.temporaryVariables2 = '' // 存储临时计算拼接值2
      this.temporaryOperator = '' // 存储临时运算符
    },

    // 显示当前的值
    showOn () {
      this.inputValue = this.inputStorage // 之前存储先赋给要显示的
      this.inputValue += this.calculator // 要显示的值再次加上当前点击的值
      this.inputStorage = this.inputValue // 同步要存储的值
    }
  }
}

valculator.vue:《style》

<style scoped>
div.inputAll {
  position: relative;
}

div.inputOne {
  position: absolute;
  top: 10%;
  /* border-bottom:1px solid gray; */
}

div.inputTwo {
  position: absolute;
  top: 15%;
}

div.inputLine {
  border-bottom: 1px solid gray;
  top: 12.5%;
  position: absolute;
}
</style>

导入其他js文件:

retrieval.js:计算器加减乘除选择器

// eslint-disable-next-line no-unused-vars
import Add from '../valculator/add'
// eslint-disable-next-line no-unused-vars
import Subtraction from '../valculator/subtraction'
import Multiplication from '../valculator/multiplication'
export default {
  retrieval: function (operator, variables1, variables2) {
    switch (operator) {
      case '+':
        // 调取公共加法
        // eslint-disable-next-line no-undef
        variables1 = Add.add(variables1, variables2)
        break
      case '-':
        // 调取公共减法
        // eslint-disable-next-line no-undef
        variables1 = Subtraction.subtraction(variables1, variables2)
        break
      // eslint-disable-next-line no-duplicate-case
      case '*':
        // 调取公共乘法
        // eslint-disable-next-line no-undef
        variables1 = Multiplication.multiplication(variables1, variables2)
        break
      default:
        break
    }
    return variables1
  }
}

add.js:加法操作

export default {
  add: function (addOne, addTwo) {
    // eslint-disable-next-line no-unused-vars
    addOne = Number(addOne) + Number(addTwo) // 显示当前的值
    return addOne
  }
}

multiplication.js:乘法操作

export default {
  multiplication: function (addOne, addTwo) {
    // eslint-disable-next-line no-unused-vars
    addOne = Number(addOne) * Number(addTwo) // 显示当前的值
    return addOne
  }
}

subtraction.js:减法操作

export default {
  subtraction: function (addOne, addTwo) {
    // eslint-disable-next-line no-unused-vars
    addOne = Number(addOne) - Number(addTwo) // 显示当前的值
    return addOne
  }
}

总结:

我们对于加减同一级别的代码可以自己添加一个js文件,然后retrieval.js里面写进入即可,当然我们最好将这个js文件换成xml就可以实现仿反射+配置文件了,对于乘除法我们需要进一步更改计算器为每次都是两个计算,不可以一次性输入很多数字,这样可以避免开优先级问题,当然我们要做成优先级是我们很重要的学习理论依据。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • vue.js实现的经典计算器/科学计算器功能示例

    本文实例讲述了vue.js实现的经典计算器/科学计算器功能.分享给大家供大家参考,具体如下: 1. HTML部分: <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script> <div id="app"> <div class="calculator"> <button @click="changeMod

  • Vue.js实现的计算器功能完整示例

    本文实例讲述了Vue.js实现的计算器功能.分享给大家供大家参考,具体如下: 1. HTML部分代码 <!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" type="text/css" href="css/css.css" rel="external nofollow" > <sc

  • Vue实现简易计算器

    本文实例为大家分享了Vue实现简易计算器的具体代码,供大家参考,具体内容如下 <html> <body> <div id="demo"> <h2>简单加减乘除计算器</h2> <p>请输入第一个数:<input type="text" v-model="firNum"></p> <p>请输入第二个数:<input type="

  • 使用Vue实现简单计算器

    使用Vue编写简单计算器,供大家参考,具体内容如下 在Vue中,v-model 指令,可以实现表单元素和 Model 中数据的双向数据绑定,接下来,我们就用这个指令编写一个简单的计算器,代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src=&q

  • vue实现简单加法计算器

    本文实例为大家分享了vue实现简单加法计算器的具体代码,供大家参考,具体内容如下 只需要简单两步 1.模板结构,设计界面 2.处理数据和控制逻辑 代码: <!DOCTYPE html> <html> <head> <title></title> </head> <body> <div id="app"> <div> <h1>简单计算器</h1> <d

  • Vue实现手机计算器

    本文实例为大家分享了Vue制作仿手机计算器的具体代码,供大家参考,具体内容如下 1.首先是把样式做出来,按钮是0-9,还有加减乘除,百分号,清除按钮,小数点,等号.等等 2.把官方网站的JS插件引用,cn.vuejs.org/v2/guide/ 页面视图 JS new Vue({ el: "#app", data: { equation: '0', isDecimalAdded: false, //防止在一组数字中间输入超过一个小数位 isOperatorAdded: false, /

  • vue实现计算器功能

    本文实例为大家分享了vue实现计算器功能的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>计算器</title> <script src="https://unpkg.com/vue/dist/vue.js"></script>

  • vue.js实现简单的计算器功能

    使用vue.js来编写一个简单的计算器,供大家参考,具体内容如下 效果如图所示:是一个十分简单的计算器,包含了加减乘除,不是用原生js写的,而是用vue.js写的 html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <div id="app"

  • Vue.js实现价格计算器功能

    本文实例为大家分享了Vue.js实现价格计算器功能的具体代码,供大家参考,具体内容如下 实现效果: 实现代码及注释: <!DOCTYPE html> <html> <head> <title>价格计算器</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial

  • Vue实现简单计算器

    本文实例为大家分享了Vue实现简单计算器的具体代码,供大家参考,具体内容如下 案例需求 案例思路 1.通过v-model 指令 实现数值A和数值B的绑定 2.给计算按钮绑定事件,实现计算逻辑 3.将计算结果绑定到对应位置 实现静态页面 <div id='app'> <h1>简单计算器</h1> <div><span>数值A:</span><span><input type="text" v-mod

随机推荐