vue或angular 寫filter時,傳入的是對象時一定注意,不能直接改變對象的值,因為在使用該filter的頁面上,若傳入的對象其他值發生變化,該filter也會重新運行,這樣可能會報錯,如下例子會產生undefined的對象值
下面的例子是利用vue vant ,arrtoArr是將['0','2']---->'問題1,問題3'的格式在頁面中顯示
頁面
<div v-for="item,index in list" v-if="list.length!=0"> {{item.parstr | filtertest}}:{{item.pararr | arrtoArr}} //item對象的count值變化也會觸發兩個filter的變化 <span class="count"> <span @click="updateCount('deduce',index)"> <i class="van-icon van-icon-reduce-o"></i> </span> {{item.count}} <span @click="updateCount('add',index)"> <i class="van-icon van-icon-add-o"></i> </span> </span> </div>
頁面對應的數據和方法
data:{ return { list:[ { parsrt:1, pararr:['2','1'], desc:'', count:0 }, { parstr:2, pararr:['1','4','5'], desc:'', count:0 } ] } } , methods:{ updateCount(oprt,index){ if(oprt=='reduce'){ if(this.serviceList[index].count<=1){ this.$dialog.confirm({ title: '警告', message: '確認刪除么' }).then(() => { this.serviceList.splice(index,1); }).catch(() => { }); }else{ this.serviceList[index].count--; //一定注意此處serviceList的內部的某一個對象的count變化了,上面頁面的兩個filter都會重新運行 } }else{ this.serviceList[index].count++; } } }
filter.js
Vue.filter('arrtoArr',function(par){ var comparlist = { 0:'問題1', 1:'問題2', 2:'問題3', 3:'問題4', 4:'問題5', 5:'問題6', 6:'問題7', 7:'問題8', 100:'問題9' } var arr = [] if(par==undefined||par.length<1){ return '' }else{ for(var i=0;i<par.length;i++){ var tt = par[i] //此處不可直接改變其par參數的值 arr.push(comparlist[tt]) } return arr.join(','); } })