目标:用三种方式实现简易的计算器(计算属性,监听器,方法)
1.创建html,导入vue,实例化vue对象。
var vm = new Vue({})
2.在body标签下创建个input标签,计算符用下拉菜单来表示。
此处的v-model.number实现双向绑定且让后边的数字当成数字处理,否则会当成字符串处理,
placeholder="请输入第一个数",让输入框在未输入数据时显示“请输入第一个数字”,
后续的两种方式的计算器也都是用类似于这种形式。
此处为用计算属性实现的html部分,结尾的res为计算属性。
+ - * /
结果是:{{res}}
此处为监听器实现计算功能,
+ - * /
答案:{{res1}}
用方法实现计算功能
此处给每个输入框设置了一个监听事件,当输入框的数据发生变化且失去焦点,则自动执行“change”方法。
+ - * /
答案:{{res2}}
3.完善vue的数据属性。
给每一个计算器的两个数字都给定义,定义为num1,num2………..,结果定义两个为res2,res3.各个操作符都定义为sign1,sign2,sign3.以备后续使用。
const vm = new Vue({ el: "#app", data: { num1:0, num2:0, sign:"+", num3:0, num4:0, sign1:"+", res1:"", num5:0, num6:0, sign2:"+", res2:"" }, </script>
4.编写方法实现计算功能
4.1.用计算属性实现
computed:{ res(){ if(this.sign == "+") { return this.num1 + this.num2; } else if(this.sign== "-") { return this.num1 - this.num2; } else if(this.sign == "*") { return this.num1 * this.num2; } else if(this.sign == "/"){ return this.num1 / this.num2; } } },
4.2用监听器实现
逻辑如下:watch{}部分是一个监听器,用于监听num3,num4和sign1数据的变化,当他们的值发生变化之后,自动触发对应的方法,更新res1的值。
watch:{ num3(val){ if(this.sign1 == "+") { this.res1 = val + this.num4; } else if(this.sign1 == "-") { this.res1 = val - this.num4; } else if(this.sign1 == "*") { this.res1 = val * this.num4; } else if(this.sign1 == "/"){ this.res1 = val / this.num4; } }, num4(val){ if(this.sign1 == "+") { this.res1 = this.num3 + val; } else if(this.sign1 == "-") { this.res1 = this.num3 - val; } else if(this.sign1 == "*") { this.res1 = this.num3 * val; } else if(this.sign1 == "/"){ this.res1 = this.num3 / val; } }, sign1(val){ if(val == "+") { this.res1 = this.num3 + this.num4; } else if(val == "-") { this.res1 = this.num3 - this.num4; } else if(val == "*") { this.res1 = this.num3 * this.num4; } else if(val == "/"){ this.res1 = this.num3 / this.num4; } } }
4.3用方法实现。(方法的实现逻辑与计算属性的逻辑一致)
methods:{ change(){ if(this.sign2 == "+") { this.res2 = this.num5 + this.num6; } else if(this.sign2 == "-") { this.res2 = this.num5 - this.num6; } else if(this.sign2 == "*") { this.res2 = this.num5 * this.num6; } else if(this.sign2 == "/"){ this.res2 = this.num5 / this.num6; } } }
5.完整代码实现及效果
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> <script type="text/javascript" src="js/vue.js"></script> </head> <body> <div id="app"> <input type="text" placeholder="请输入第一个数" v-model.number="num1"> <select v-model="sign"> <option>+</option> <option>-</option> <option>*</option> <option>/</option> </select> <input type="text" placeholder="请输入第二个数" v-model.number="num2"> <br> 结果是:{{res}} <br> <input type="text" placeholder="请输入第一个数" v-model.number="num3"> <select v-model="sign1"> <option>+</option> <option>-</option> <option>*</option> <option>/</option> </select> <input type="text" placeholder="请输入第二个数" v-model.number="num4"> <br> 答案:{{res1}} <br> <input type="text" placeholder="请输入第一个数" v-model.number="num5" @change="change"> <select v-model="sign2" @change="change"> <option>+</option> <option>-</option> <option>*</option> <option>/</option> </select> <input type="text" placeholder="请输入第二个数" v-model.number="num6" @change="change"> <br> 答案:{{res2}} </div> <script> var vm = new Vue({ el: "#app", data: { num1:0, num2:0, sign:"+", num3:0, num4:0, sign1:"+", res1:"", num5:0, num6:0, sign2:"+", res2:"" }, methods:{ change(){ if(this.sign2 == "+") { this.res2 = this.num5 + this.num6; } else if(this.sign2 == "-") { this.res2 = this.num5 - this.num6; } else if(this.sign2 == "*") { this.res2 = this.num5 * this.num6; } else if(this.sign2 == "/"){ this.res2 = this.num5 / this.num6; } } }, computed:{ res(){ if(this.sign == "+") { return this.num1 + this.num2; } else if(this.sign == "-") { return this.num1 - this.num2; } else if(this.sign == "*") { return this.num1 * this.num2; } else if(this.sign == "/"){ return this.num1 / this.num2; } } }, watch:{ num3(val){ if(this.sign1 == "+") { this.res1 = val + this.num4; } else if(this.sign1 == "-") { this.res1 = val - this.num4; } else if(this.sign1 == "*") { this.res1 = val * this.num4; } else if(this.sign1 == "/"){ this.res1 = val / this.num4; } }, num4(val){ if(this.sign1 == "+") { this.res1 = this.num3 + val; } else if(this.sign1 == "-") { this.res1 = this.num3 - val; } else if(this.sign1 == "*") { this.res1 = this.num3 * val; } else if(this.sign1 == "/"){ this.res1 = this.num3 / val; } }, sign1(val){ if(val == "+") { this.res1 = this.num3 + this.num4; } else if(val == "-") { this.res1 = this.num3 - this.num4; } else if(val == "*") { this.res1 = this.num3 * this.num4; } else if(val == "/"){ this.res1 = this.num3 / this.num4; } } } }) </script></body></html>