一:监听器
概述:watch监听器的用法相当于是我们监视一个数据的变化,在这个数据变化时执行一些操作,这个操作可以是任何操作
监听者里面有三个参数:
1.handler :function(newVal,oldVal){} 操作者 代表这个数据改变的时候执行什么操作 有两个参数 newVal (改变后的数据)oldVal(改变前的数据)
2.deep:false, 如果监听的是一个引用类型的数据(对象/数组),需要深度监听,true是深度监听,false是浅监听,默认是false
3.immediate:true, 实例创建的时候是否执行watch 为true时代表 监听的数据第一次被绑定的时候就开始监听。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>监听器练习</title> </head> <body> <div id="app"> <input type="text" v-model="conten"> <div>{{showconten}}</div> <button @click="obj.name='小红'">改变数据</button> </div> <script src="lib/vue-2.4.0.js"></script> <script type="text/javascript"> var vm = new Vue({ el: "#app", data: { conten: "", obj: { age: 12, name: "小明" }, num: 0 }, computed: { showconten() { return "输入的内容是" + this.conten; } }, watch: { //监听input框的变化情况 //在input框每次输入内容的时候,这一行在后台都会打印值:改变后的数据---改变前的数据 'conten': { //定义在watch里的conten代表监控数据conten handler: function(newVal, oldVal) { //操作者 console.log(newVal, "---", oldVal) }, }, //监听对象中name属性 'obj.name': { //刚刚进入页面时 数据没有改变,默认undefined,后台打印 小明 # undefined //当点击改变数据的时候,后台打印 小红 # 小明 handler: function(newVal, oldVal) { console.log(newVal, '#', oldVal) }, deep: true, //深度监听,可以监听这个对象的某个属性比如说监听 'obj.name' immediate: true, //监听的数据第一次被绑定的时候就开始监听 }, } }) </script> </body> </html>
此外:
监听器可以定义在实例外面,调用vm.$watch方法来进行数据监测.
第一个参数是监听的数据,第二个参数就是一个{}里面有三个参数(跟定义在实例里面的写法一样),也可写成简写形式(只有一个handler)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>监听器练习2</title> </head> <body> <div id="app"> <button @click="num++">改变num</button> </div> <script src="lib/vue-2.4.0.js"></script> <script type="text/javascript"> var vm = new Vue({ el: "#app", data: { num: 0 }, watch: { //如果一个监听器不需要deep和immediate参数的时候可以直接写handler 'num': function(newVal, oldVal) { console.log(newVal, '===', oldVal) } } }) vm.$watch("num", { handler: function(newVal, oldVal) { console.log(newVal, '====', oldVal) } }) vm.$watch("num", function(a, b) { console.log(a, '===', b) }) </script> </body> </html>
二:过滤器
概述:过滤器filters可以在插值语句和属性绑定v-bind的时候用 用法是 原本的值|过滤器,过滤器默认的第一个参数是你要过滤的数据
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>过滤器练习</title> </head> <body> <div id="app"> <p v-for="count in 4">{{count|add("¥")}}</p> </div> <script src="lib/vue-2.4.0.js"></script> <script type="text/javascript"> var vm=new Vue({ el:"#app", // 局部过滤器 filters:{ //要过滤的是在每个数字后面加¥,写法如下 add(msg,x){//msg是过滤的数据 console.log(msg) return msg+x; }, } }) </script> </body> </html>
此外:局过滤器,在所有的实例里都能用,若全局跟局部过滤器重名的话,会优先使用局部的
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>过滤器全局写法</title> </head> <body> <div id="app"> <img :src="src1|getimg" alt=""> </div> <script src="lib/vue-2.4.0.js"></script> <script type="text/javascript"> //我们要的是../01.jpg,过滤如下: Vue.filter("getimg",function(msg){ return "../"+msg; }) var vm=new Vue({ el:"#app", data:{ src1:"01.jpg" } }) </script> </body> </html>