Vue中用data,methods,computed,watch四种方法实现计算

 效果展示:

 使用工具:HBuilder

插件:Vue.js

 1.data

<!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" v-model.number="number1" />
			<select v-model="opt">
				<option>+</option>
				<option>-</option>
				<option>*</option>
				<option>/</option>
			</select>
			<input type="text" v-model.number="number2" />
			<button>=</button><br />
			<p v-if="opt=='+'">{{number1}}{{opt}}{{number2}}</p>
			<p v-if="opt=='-'">{{number1}}{{opt}}{{number2}}</p>
			<p v-if="opt=='*'">{{number1}}{{opt}}{{number2}}</p>
			<p v-if="opt=='/'">{{number1}}{{opt}}{{number2}}</p>
		</div>
	</body>
	<script type="text/javascript">
		var vm = new Vue({
			el:"#app",
			data:{
				number1:0,
				number2:0,
				opt:""
			}
		})
	</script>
</html>

2.methods

<!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" v-model.number="number1" />
			<select v-model="opt" @click="calc">
				<option value="+">+</option>
				<option value="-">-</option>
				<option value="*">*</option>
				<option value="/">/</option>
			</select>
			<input type="text" v-model.number="number2" />
			<button >=</button><br />
			结果:{{result}}
		</div>
	</body>
	<script type="text/javascript">
		var vm = new Vue({
			el:"#app",
			data:{
				number1:0,
				number2:0,
				opt:"+",
				result:""
			},
			methods:{
				calc(){
					if(this.opt=="+"){
					this.result = this.number1+this.number2}
					else if(this.opt=="-"){
						this.result = this.number1-this.number2
					}else if(this.opt=="*"){
						this.result = this.number1*this.number2
					}else if(this.opt=="/"){
						this.result = this.number1/this.number2
					}
				}
			}
		})
	</script>
</html>

 3.computed

<!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 id="input" type="number" v-model="num1"  />
			 <select v-model="selected">
				<option value ="">请选择</option>
			 	<option value ="+">+</option>
				<option value ="-">-</option>
				<option value ="*">*</option>
				<option value ="/">/</option>
			 </select>
			<input type="number" v-model="num2" />
			<button>=</button>
			<input type="text" v-model="result" onfocus="this.blur()"/>
		</div>
		<script type="text/javascript">
			var vm = new Vue({
				el:'#app',
				data:{
					num1:0,
					num2:0,
					selected:'+'
				},
				computed:{
					result:function(){
						if(this.selected === '' || this.num1=='' || this.num2 =='')
							return null
						return eval(`${this.num1}${this.selected}(${this.num2})`)
					}
				}
			})
		</script>
	</body>
</html>

 4.watch

<!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" v-model.number="number1" />
			<select v-model="opt">
				<option value="+">+</option>
				<option value="-">-</option>
				<option value="*">*</option>
				<option value="/">/</option>
			</select>
			<input type="text" v-model.number="number2" />
			<button>=</button><br />
			结果:{{jisuan}}
		</div>
	</body>
	<script type="text/javascript">
		var vm = new Vue({
			el:"#app",
			data:{
				number1:0,
				number2:0,
				opt:"+",
				jisuan:""
			},
			watch:{
				number1:function(val){
					if(this.opt=='+'){
						this.jisuan=val+this.number2;
					}else if (this.opt=='-') {
						this.jisuan=val-this.number2;
					}else if (this.opt=='*') {
						this.jisuan=val*this.number2;
					}else if (this.opt=='/') {
						this.jisuan=val/this.number2;
					};
				number2:function(val){
					if(this.opt=='+'){
						this.jisuan=this.number1+val;
					}else if(this.opt=='-'){
						this.jisuan=this.number1-val;
					}else if(this.opt=='*'){
						this.jisuan=this.number1*val;
					}else if(this.opt=='/'){
						this.jisuan=this.number1/val;
					}
				},
			}
		})
	</script>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值