vue2.0裏,不再有自帶的過濾器,需要自己定義過濾器。定義的方法如下:
註冊一個自定義過濾器,它接收兩個參數:過濾器 ID 和過濾器函數。
Vue.filter('filtername',function(value,參數){
return 參數+value.split('').reverse().join('');
});
function裏第一個參數value默認爲使用這個過濾器的data對象內的值,在本例中是msg的值’you are mine’。
坑1:第一個參數必須爲自身的值,後面可以加任意多的參數。數序顛倒就會出錯。
下面來一個最常見的小例子來說明在使用vue2.0過濾器並結合v-text時遇到的其他的幾個坑:
需求:在頁面輸出一段反轉順序的字符串。
完整代碼如下:
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
</style>
</head>
<script src='./vue2.js'></script>
<script>
window.onload=function(){
//類似於自定義指令,可以用全局方法 Vue.filter() 註冊一個自定義過濾器,它接收兩個參數:過濾器 ID 和過濾器函數。
Vue.filter('reverseString',function(value,myString){
// function裏第一個參數value默認爲使用這個過濾器的data值,在本例中是msg的值'you are mine'。請注意:第一個參數必須爲自身的值,後面可以加任意多的參數
return myString+value.split('').reverse().join('');
});
new Vue({
el:'#box',
data:{
msg:'you are mine'
}
});
};
</script>
<body>
<div id='box'>
<p>msg is: <br>{{msg}}</p>
<hr>
<p>reverse msg is: <br>{{msg|reverseString( 'Hello:' )}}</p><!-- 在vue2.0裏 過濾器只能用類似函數的寫法reverseString( 'I must tell you:'),括號內是參數,不同於vue1.0的用空格後加參數的寫法" msg|reverseString 'I must tell you:' " -->
<!-- <p v-text="msg|reverseString( 'I must tell you:' )"></p>失效 -->
<!-- v-text裏用過濾器失效,原因是在vue2.0裏 管道符‘|’只能用在mousetache和v-bind中 -->
</div>
</body>
</html>
輸出結果爲:
msg is:
you are mine
reverse msg is:
Hello:enim era uoy
坑2:在vue2.0裏 過濾器只能用類似函數的寫法reverseString( ‘I must tell you:’),括號內是參數,不同於vue1.0的用空格後加參數的寫法;
坑3:v-text裏用過濾器失效,原因是在vue2.0裏 管道符‘|’只能用在mousetache和v-bind中。
以上只是一個簡單的過濾器的用法,如果涉及到複雜的數據處理的過濾器,比如實現vue1.0裏用到過濾器套過濾器的功能,個人感覺也可以用computed來代替過濾器。