Vue2.0系列(六)過濾器

vue2.0已經(jīng)廢棄了過濾器,需要自定義過濾器,用于一些常見的文本格式化。
感覺超級(jí)好用?。?/p>

過濾器可以用在兩個(gè)地方:雙花括號(hào)插值v-bind表達(dá)式。

過濾器應(yīng)該被添加在JavaScript表達(dá)式的尾部,由管道符指示。

一、注冊(cè)全局過濾器

注意事項(xiàng):
1、全局方法Vue.filter()注冊(cè)一個(gè)自定義過濾器,必須放在vue實(shí)例化前面
2、過濾器函數(shù)始終以表達(dá)式的值作為第一個(gè)參數(shù),帶引號(hào)的參數(shù)視為字符串,而不帶引號(hào)的參數(shù)按表達(dá)式計(jì)算
3、可以設(shè)置兩個(gè)過濾器參數(shù),前提這兩個(gè)過濾器處理的不沖突
4、用戶從input輸入的數(shù)據(jù)在會(huì)傳到model之前也可以先處理

案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>過濾器</title>
</head>
<body>

<div id="app">
    <!-- 首字符串大寫 -->
    <div>首字母大寫過濾器:{{str | upcase}}</div>
    <!-- 給過濾器傳入?yún)?shù) -->
    <p>求和過濾器:{{message | sum(10,20)}}</p> 
</div>

<script type="text/javascript" src='https://i0.jrjimg.cn/zqt-red-1000/focus/focus2017YMZ/teamFrighting/js/vue.min.js'></script>
<script type="text/javascript">
        //全局方法 Vue.filter()注冊(cè)一個(gè)自定義過濾器,必須放在Vue實(shí)例化前面
        // 注冊(cè)一個(gè)首字母大寫的過濾器
        Vue.filter("upcase", function(value) { 
                if (!value) return ''
                value = value.toString()
                return value.charAt(0).toUpperCase() + value.slice(1)
        });
        // 全局注冊(cè)一個(gè)求和過濾器
        Vue.filter('sum', function (value, a, b) {
            return value + a + b;
        });

        var demo = new Vue({
            el: "#app",
            data: {
                str:'hello',
                message:12
            }
        });
</script>
</body>
</html>

案例效果:

二、注冊(cè)在實(shí)例化內(nèi)部

過濾器也可以注冊(cè)在實(shí)例內(nèi)部,僅在使用它的實(shí)例里面注冊(cè)。

根據(jù)以上案例改編:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<div id="app">
    <!-- 首字符串大寫 -->
    <div>首字母大寫過濾器:{{str | upcase}}</div>
    <!-- 給過濾器傳入?yún)?shù) -->
    <p>求和過濾器:{{message | sum(10,20)}}</p> 
</div>

<script type="text/javascript" src='https://i0.jrjimg.cn/zqt-red-1000/focus/focus2017YMZ/teamFrighting/js/vue.min.js'></script>
<script type="text/javascript">
        var demo = new Vue({
            el: "#app",
            data: {
                str:'hello',
                message:12
            },
            filters: {
                upcase:function(value){
                    if (!value) return ''
                    value = value.toString()
                    return value.charAt(0).toUpperCase() + value.slice(1)
                },
                sum:function(value, a, b){
                    return value + a + b;
                }
            }
        });

</script>
</body>
</html>

效果:


三、常見過濾器

根據(jù)時(shí)間戳轉(zhuǎn)化成時(shí)間格式:mm-dd hh:tt

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<div id="app">
    <!-- 將時(shí)間戳轉(zhuǎn)化為時(shí)間 -->
    <h1>根據(jù)時(shí)間戳轉(zhuǎn)化為時(shí)間:{{ str | formateTime}}</h1>
</div>

<script type="text/javascript" src='https://i0.jrjimg.cn/zqt-red-1000/focus/focus2017YMZ/teamFrighting/js/vue.min.js'></script>
<script type="text/javascript">
        var demo = new Vue({
            el: "#app",
            data: {
                str:1517568434324,
            },
            filters: {
                formateTime:function(nS){
                    return ((new Date(nS).getMonth()+1)<10?'0'+(new Date(nS).getMonth()+1):(new Date(nS).getMonth()+1)) + '-' + (new Date(nS).getDate()<10?'0'+new Date(nS).getDate():new Date(nS).getDate()) + ' ' + (new Date(nS).getHours()<10?'0'+new Date(nS).getHours():new Date(nS).getHours()) + ':' + (new Date(nS).getMinutes()<10?'0'+new Date(nS).getMinutes():new Date(nS).getMinutes())
                }
            }
        });

</script>
</body>
</html>

案例效果:

根據(jù)時(shí)間戳轉(zhuǎn)化成時(shí)間格式:多長時(shí)間之前。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

<div id="app">
    <!-- 將時(shí)間戳轉(zhuǎn)化為時(shí)間 -->
    <h1>根據(jù)時(shí)間戳轉(zhuǎn)化為時(shí)間:{{ str | formateTime}}</h1>
</div>

<script type="text/javascript" src='https://i0.jrjimg.cn/zqt-red-1000/focus/focus2017YMZ/teamFrighting/js/vue.min.js'></script>
<script type="text/javascript">
        var demo = new Vue({
            el: "#app",
            data: {
                str:1517568434324,
            },
            filters: {
                formateTime:function(timespan){
                    var dateTime = new Date(timespan);
                    var year = dateTime.getFullYear();
                    var month = dateTime.getMonth() + 1;
                    var day = dateTime.getDate();
                    var hour = dateTime.getHours();
                    var minute = dateTime.getMinutes();
                    var second = dateTime.getSeconds();
                    var now = new Date();
                    var now_new = Date.parse(now);   //typescript轉(zhuǎn)換寫法

                    var milliseconds = 0;
                    var timeSpanStr;

                    milliseconds = now_new - timespan;

                    if (milliseconds <= 1000 * 60 * 1) {
                        timeSpanStr = '剛剛';
                    }
                    else if (milliseconds <= 1000 * 60 * 60) {
                        timeSpanStr = Math.round((milliseconds / (1000 * 60))) + '分鐘前';
                    }
                    else if (milliseconds <= 1000 * 60 * 60 * 24) {
                        timeSpanStr = Math.round(milliseconds / (1000 * 60 * 60)) + '小時(shí)前';
                    }
                    else if (milliseconds <= 1000 * 60 * 60 * 24 * 15) {
                        timeSpanStr = Math.round(milliseconds / (1000 * 60 * 60 * 24)) + '天前';
                    }
                    else if (milliseconds > 1000 * 60 * 60 * 24 * 15 && year == now.getFullYear()) {
                        timeSpanStr = month + '-' + day + ' ' + hour + ':' + minute;
                    } else {
                        timeSpanStr = year + '-' + month + '-' + day + ' ' + hour + ':' + minute;
                    }
                    return timeSpanStr;
                }
            }
        });

</script>
</body>
</html>

案例效果


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,536評(píng)論 19 139
  • Vue 實(shí)例 屬性和方法 每個(gè) Vue 實(shí)例都會(huì)代理其 data 對(duì)象里所有的屬性:var data = { a:...
    云之外閱讀 2,366評(píng)論 0 6
  • 1.安裝 可以簡單地在頁面引入Vue.js作為獨(dú)立版本,Vue即被注冊(cè)為全局變量,可以在頁面使用了。 如果希望搭建...
    Awey閱讀 11,294評(píng)論 4 129
  • 李大寶水箱事件之后,兩人的關(guān)系似乎更近了些,但是誰也沒有說破,身為明寶后援團(tuán)會(huì)長的林濤看在眼里急在心里:這兩個(gè)人是...
    帥帥的秦明閱讀 1,506評(píng)論 0 2
  • SQL Server提供的幾種備份類型 1 完整(Full)備份:直接將所備份的數(shù)據(jù)的所有區(qū)(Extent)進(jìn)行復(fù)...
    cebdba閱讀 1,201評(píng)論 0 1

友情鏈接更多精彩內(nèi)容