Vue2.0裏過濾器容易踩到的坑

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來代替過濾器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章