博客列表 >Vue之制作简易计算器

Vue之制作简易计算器

longlong
longlong原创
2020年09月09日 12:37:541201浏览

1. 使用计算属性制作计算器

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  8. <style>
  9. select {
  10. width: 100px;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <div class="app">
  16. <input type="number" v-model="num1"> + <input type="number" v-model="num2">=<span>{{add}}</span><br>
  17. <input type="number" v-model="num3"> - <input type="number" v-model="num4">=<span>{{minus}}</span><br>
  18. <input type="number" v-model="num5"> * <input type="number" v-model="num6">=<span>{{multi}}</span><br>
  19. <input type="number" v-model="num7"> / <input type="number" v-model="num8">=<span>{{division}}</span>
  20. </div>
  21. <script>
  22. const vm = new Vue({
  23. el: '.app',
  24. data: {
  25. num1: 0,
  26. num2: 0,
  27. num3: 0,
  28. num4: 0,
  29. num5: 0,
  30. num6: 0,
  31. num7: 0,
  32. num8: 0,
  33. },
  34. computed: {
  35. add() {
  36. return this.num1 * 1 + this.num2 * 1;
  37. },
  38. minus() {
  39. return this.num3 * 1 - this.num4 * 1;
  40. },
  41. multi() {
  42. return this.num5 * 1 * this.num6 * 1;
  43. },
  44. division() {
  45. return this.num7 * 1 / this.num8 * 1;
  46. },
  47. },
  48. });
  49. </script>
  50. </body>
  51. </html>

这样制作的计算器有一个缺点:不能手动去选择运算符,我只能以这样的方式分为了四个计算式,因为computed属性,会自动完成计算,不能动态的去设置其获取结果的方式,而且分为四个计算式以后,数据对象data中的属性太多了,数据太复杂,所以下面另外采用一种方式:使用侦听属性来制作计算器,它可以动态去侦听运算符的变化以及文本框的变化,这样就只需要一个计算式就能完成

2. 使用侦听属性制作计算器

2.1 先制作一个加法器,了解原理

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  8. </head>
  9. <body>
  10. <div class="app">
  11. <input type="number" v-model="num1"> +
  12. <input type="number" v-model="num2">
  13. = <span>{{res}}</span>
  14. </div>
  15. <script>
  16. const vm = new Vue({
  17. el: ".app",
  18. data: {
  19. num1: 0,
  20. num2: 0,
  21. res: 0,
  22. },
  23. // 定义一个公共方法,求和运算
  24. methods: {
  25. add(n1, n2) {
  26. this.res = n1 * 1 + n2 * 1;
  27. }
  28. },
  29. // 监听两个文本框中数值的变化,一旦变化就调用求和运算
  30. watch: {
  31. num1() {
  32. // 因为使用了 v-model 数据双向绑定,此时传入的参数就是变化后真实的值
  33. this.add(this.num1, this.num2);
  34. },
  35. num2() {
  36. this.add(this.num1, this.num2);
  37. },
  38. },
  39. });
  40. </script>
  41. </body>
  42. </html>

基于上面案例,可以将两个input框中间的+号运算符,使用一个下拉列表来代替,下拉列表中就保存 + - * / 四个运算符,然后在methods属性中做一个switch判断,使用不同的运算符就将结果赋于不同的运算值,最后在watch侦听属性中,侦听运算符的变化,就可以动态的获取结果

2.2 制作加减乘除计算器

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  8. </head>
  9. <body>
  10. <div class="app">
  11. <input type="number" v-model="num1">
  12. <!-- 使用v-model 双向绑定此时下拉列表的值value -->
  13. <select v-model="cal">
  14. <option value="+">+</option>
  15. <option value="-">-</option>
  16. <option value="*">*</option>
  17. <option value="/">/</option>
  18. </select>
  19. <input type="number" v-model="num2">
  20. = <span>{{res}}</span>
  21. </div>
  22. <script>
  23. const vm = new Vue({
  24. el: ".app",
  25. data: {
  26. // 设置默认值
  27. num1: 0,
  28. num2: 0,
  29. res: 0,
  30. cal: "+",
  31. },
  32. // 根据运算符的值(this.cal)定义不同的运算方法
  33. methods: {
  34. jisuan(n1, n2) {
  35. switch (this.cal) {
  36. case "+":
  37. this.res = (n1 * 1) + (n2 * 1);
  38. break;
  39. case "-":
  40. this.res = (n1 * 1) - (n2 * 1);
  41. break;
  42. case "*":
  43. this.res = (n1 * 1) * (n2 * 1);
  44. break;
  45. case "/":
  46. this.res = (n1 * 1) / (n2 * 1);
  47. break;
  48. }
  49. },
  50. },
  51. // 侦听属性
  52. watch: {
  53. // 监听第一个输入框
  54. num1() {
  55. this.jisuan(this.num1, this.num2);
  56. },
  57. // 监听第二个输入框
  58. num2() {
  59. this.jisuan(this.num1, this.num2);
  60. },
  61. // 监听运算符
  62. cal() {
  63. this.jisuan(this.num1, this.num2);
  64. }
  65. },
  66. });
  67. </script>
  68. </body>

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议