vue学习笔记三(监听和事件处理小案例)

vue监听watch

Vue.js 监听属性 watch,可以通过 watch 来响应数据的变化,使用这个属性,可以监视 data 中指定数据的变化,然后触发这个 watch 中对应的 function 处理函数
案例一:实现加减乘除计算器功能
在这里插入图片描述
在第一个表单中输入数字,然后通过下拉列表选择要进行的运算,然后再第二个表单中输入数字后,结果便会自动显示再最后一个表单中

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		//注意:若是没安装vue.js可以使用注释掉的这个script标签
		//<script src="https://cdn.jsdelivr.net/npm/[email protected]"></script>
		<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
	  <!-- 简单的加减乘除计算器 -->
	  <div id="app">
		  <h1>加减乘除计算器</h1>
	      <input type="number" v-model="firstname">
		  <select  v-model="selected">
		      <option value="0">+</option>
		      <option value="1">-</option>
		      <option value="2">*</option>
		      <option value="3">/</option>
		  </select>
	      <input type="number" v-model="lastname">=
	      <input type="number" v-model="fullname">
	  </div>
	  
	  <script>
	    var vm = new Vue({
	      el: '#app',
	      data: {
	          firstname: '',
	          lastname: '',
	          fullname: '',
			  selected:''
	      },
	      watch: {
			  //firstname和lastname的值默认为0
	          'firstname': function(newVal){
				  if(this.selected=='0'){
					  this.fullname = (newVal-0)  + (this.lastname-0)     
				  }  
				      if(this.selected=='1'){  
				      this.fullname = (newVal-0)  - (this.lastname-0)
				  }  
				      if(this.selected=='2'){  
				      this.fullname = (newVal-0)  * (this.lastname-0)  
				  }  
				      if(this.selected=='3'){  
				      this.fullname = (newVal-0)  / (this.lastname-0)  
				  }  
	          },
	          'lastname': function(newVal){
				  if(this.selected=='0'){
				  	  this.fullname = (this.firstname-0)  + (newVal-0)     
				  }  
				      if(this.selected=='1'){  
				      this.fullname = (this.firstname-0)  - (newVal-0)
				  }  
				      if(this.selected=='2'){  
				      this.fullname = (this.firstname-0)  * (newVal-0)  
				  }  
				      if(this.selected=='3'){  
				      this.fullname = (this.firstname-0)  / (newVal-0)  
				  }
	              
	          }
	      }
	    });
	  </script>
	  
	</body>
</html>

案例二:单位换算器(千米、米、厘米)
不多解释直接上代码
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
	  <!-- 简单的单位换算 -->
	  <div id = "app">
		  <h1>单位换算</h1>
	     千米 : <input type = "number" v-model = "kilometers">: <input type = "number" v-model = "meters">
	  	厘米:<input type = "number" v-model = "limeters">
	  </div>
	   
	  <script>
		var vm = new Vue({
		   el: '#app',
		   data: {
		      kilometers : 0,
		      meters:0,
			  limeters:0
		   },
		   watch : {
		      kilometers:function(val) {
		         this.kilometers = val;
		         this.meters = this.kilometers * 1000;
				 this.limeters = this.kilometers * 100000; 
		      },
		      meters:function (val) {
		         this.kilometers = val/1000;
		         this.meters = val;
				 this.limeters = val/100; 
		      },
			  limeters:function(val){
				  this.limeters = val;
				 this.kilometers = val/ 100000;
				 this.meters = val/100; 
			  }
		   }
		   
		});
	  </script>
	  
	</body>
</html>

vue的事件处理

第一个小案例是模仿购物车写的一个简单的事件处理案例,第二个也是一个加减乘除计算器,但是没使用watch监听,需点击等号才可以得出结果
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="vue.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		<div id="app">
			<!-- 对于vue事件处理的学习案例 -->
			<div>
			        商品价格:<input type="number" v-model = "price"><br>
			        商品数量:<button v-on:click = "count--">-</button>{{ count }}<button v-on:click = "count++">+</button><br>
			        总价格:<span>{{ price * count }}</span>
			</div>
			   <!-- 事件处理简单的加减乘除计算器 -->
		        <input type="number" v-model = "input1">
		        <select  v-model="selected">
		            <option value="0">+</option>
		            <option value="1">-</option>
		            <option value="2">*</option>
		            <option value="3">/</option>
		        </select>
		        <input type="number" v-model = "input2">
		        <button v-on:click="onclick">=</button>
		        <span>{{ sum }}</span>
		    </div>
		    
		    <script>
		        var vm = new Vue({
		            el:'#app',
		            data:{
						price:'5',
						count:'0',
		                selected:'',
		                input1:'',
		                input2:'',
		                sum:''
		            },
		            methods:{
		                onclick(){
		                    if(this.selected=='0'){  
		                    this.sum=(this.input1-0)+ (this.input2-0)  
		                }  
		                    if(this.selected=='1'){  
		                    this.sum=eval(this.input1- this.input2)
		                }  
		                    if(this.selected=='2'){  
		                    this.sum=eval(this.input1* this.input2)  
		                }  
		                    if(this.selected=='3'){  
		                    this.sum=eval(this.input1/this.input2)  
		                } 
		
		                }
		            }
		        })
		    </script>
	</body>
</html>

事件修饰符
Vue为 v-on 提供了事件修饰符来处理 DOM 事件细节,通过由点(.)表示的指令后缀来调用修饰符。
.stop
.prevent
.capture
.self
.once

<div v-on:click.prevent="greet">1</div>//等价于event.preventDefault()
<div v-on:click.stop="greet">2</div>//等价于event.stopPropagation()
<div v-on:click.capture="greet">3</div>//等价于事件回调函数采用捕获阶段监听事件
<div v-on:click.self="greet">4</div>//等价于event.target
 

按键修饰符
常见按键名:
.enter
.tab
.delete (捕获 “删除” 和 “退格” 键)
.esc
.space
.up
.down
.left
.right
.ctrl
.alt
.shift
.meta

<!-- 只有在 keyCode 是 13 时调用 vm.submit() -->
<input v-on:keyup.13="submit">

心得:
现在慢慢开始接触到比较难点的东西了,但多去看看其他大佬们写的小案例,借鉴下,感觉还是挺好的,一步一步的学其实代码什么的都能看懂,主要就是要多练对编写要具有一定熟练度,去看别人写的案例时,要自己看着敲一遍,或者加入自己的一些想法去改编一下,这都是一种学习。

猜你喜欢

转载自blog.csdn.net/weixin_43889532/article/details/106739485