$watch:屬性值改變就會改變css
$unwatch:非監控屬性數組
$fire: 解除屬性監控函數
css樣式code
/*類下面的div的hover事件觸發*/ .ms-hover div:hover{ background-color:yellow; }
界面對象
<body ms-controller="test" class="ms-hover"> <div ms-duplex="aaa" ms-click="change('aaa')">{{aaa}}</div> <div ms-duplex="$bbb" ms-click="change('$bbb')">{{$bbb}}</div> <div ms-duplex="ccc" ms-click="change('ccc')">{{ccc}}</div> </body>
js操做邏輯blog
var vm=avalon.define({ $id:"test", aaa:"aaa", $bbb:"bbb", //$開頭的非監控屬性 ccc:"ccc", $skipArray:['ccc'], //放入非監控屬性數組的元素會自動轉換爲非監控屬性 change:function(parm){ vm[parm]=new Date-0; //寫法等價於:vm.aaa=new Date; 時間戳 } }); //$watch函數參數:$watch(監聽vm的屬性名,function(a,b)) -->回調函數:a:屬性的新值,b屬性的舊值 vm.$watch("aaa",function(a,b){ console.log("aaa","新值:"+a,"舊值:"+b); }); //avalon $開頭的屬性爲非監控屬性,avalon會進行忽略處理 vm.$watch("$bbb",function(a,b){ console.log("$bbb","新值:"+a,"舊值:"+b); }); vm.$watch("ccc",function(a,b){ console.log("ccc","新值:"+a,"舊值:"+b); });
效果:事件
css樣式ip
.ms-hover div:hover{ background-color:yellow; }
<body ms-controller="test" class="ms-hover"> <div ms-duplex="aaa" ms-click="change('aaa')">{{aaa}}</div> <div ms-duplex="ddd" ms-click="change('ddd')">{{ddd}}</div> <div ms-duplex="$bbb" ms-click="change('$bbb')">{{$bbb}}</div> <div ms-duplex="ccc" ms-click="change('ccc')">{{ccc}}</div> </body>
js操做邏輯回調函數
/* * unwatch: *若是傳入兩個參數,第一個爲屬性名,第二個爲回調,那麼就會移除此監聽函數 *若是隻傳入此屬性名,則移除此屬性的全部監聽函數 *若是什麼都不傳,中斷VM的靜聽 * *$fire:打破不能觸發非監控屬性的回調限制,注意死循環(比較新舊值變化才觸發) */ var vm=avalon.define({ $id:"test", aaa:"aaa", ddd:"ddd", $bbb:"bbb", ccc:"ccc", $skipArray:['ccc'],//放入skipArray的監控屬性會自動轉換爲非監控屬性 change:function(aaa){ var old = vm[aaa]; //舊值 vm[aaa] = new Date - 0; //新值 vm.$fire(aaa, vm[aaa], old); //新舊值比較發生變化以後觸發,使得watch函數可監聽非監控屬性 } }); vm.$watch("$all",function(name,a,b){ //name:監聽屬性 a:屬性新值 b:屬性舊值 console.log("name:"+name+"新值:"+a+"--舊值:"+b); });
效果:avalon
樣式
.ms-hover div:hover{ background-color:yellow; }
界面
<body ms-controller="ex"> <div class="ms-hover" ms-click="change('array')"> <div ms-repeat="array">{{el}}</div> </div> </body>
js操做邏輯
//對象數組子元素的監聽 var vm=avalon.define({ $id:"ex", aaa:{bbb:{ccc:1}}, array:[1,2], change:function(aaa){ vm[aaa].push(new Date-1); } }); //監聽子孫元素只需在該元素的父元素上監聽將子元素看做是父元素的一個屬性 vm.aaa.bbb.$watch("ccc",function(a,b){ avalon.log(a,b); }); setTimeout(function(){ vm.aaa.bbb.ccc=new Date-0; }, 2000); //watch:監聽array的屬性length的值:數組只能監聽到數組長度 vm.array.$watch("length",function(a,b){ avalon.log("length:"+a+"--"+b); });
css樣式
.ms-hover div:hover{ background-color:yellow; }
界面
<body ms-controller="test" class="ms-hover"> <div ms-duplex="aaa" ms-click="change('aaa')">{{aaa}}</div> <div ms-duplex="ddd" ms-click="change('ddd')">{{ddd}}</div> <div ms-duplex="$bbb" ms-click="change('$bbb')">{{$bbb}}</div> <div ms-duplex="ccc" ms-click="change('ccc')">{{ccc}}</div> </body>
js操做邏輯
var vm=avalon.define({ $id:"test", aaa:"aaa", ddd:"ddd", $bbb:"bbb", ccc:"ccc", $skipArray:['ccc'], //放入skipArray的監控屬性會自動轉換爲非監控屬性 change:function(aaa){ vm[aaa]=new Date-0; //寫法等價於:vm.aaa=new Date; 時間戳 } }); /* var fn=function(){ console.log("aaa:"+vm.aaa+"---"+"ddd:"+vm.ddd); } //將監控的公用方法脫離出來實現公用出來 vm.$watch("aaa",fn); vm.$watch("ddd",fn); */ //由於監控的屬性可能會特別多,若是須要統一的方法,則能夠使用$all統一監聽 vm.$watch("$all",function(name,a,b){ //name:監聽屬性 a:屬性新值 b:屬性舊值 console.log("name:"+name+"新值:"+a+"--舊值:"+b); });
效果: