一:監聽器
概述: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>
