vue基礎之過濾器(filter)的使用
阿新 • • 發佈:2019-02-18
使用方式:
<!-- 在雙花括號中 -->
{{ message | formatDate }}
<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatDate"></div>
那麼,我們該如何去寫過濾器呢?接下來我們假定一種場景,後端返回的一個 時間列表大概是長下邊這樣的:
[
{time: 1533527037000},
{time: 1533527037000},
{time: 1533527037000}
]
可以看到這個陣列中有三個資料,分別是三個時間戳,如果沒有過濾器,我們只能用普通的方式,迴圈這個陣列,將每一項的時間戳轉換為具體的事件。但是,vue提供的過濾器可以幫我們很好的解決這種問題。接下來我們看如何去使用過濾器解決。
首先定義過濾器有兩種方式,第一種是全域性過濾器,我們可以直接在vue物件上使用filter方法註冊過濾器,這種全域性註冊的過濾器在任何一個元件內都可以使用。第二種則是元件內部的過濾器,註冊元件內部過濾器則只能在當前元件內使用,接下來我們使用這兩種方式註冊過濾器函式。
全域性過濾器:
import Vue from 'vue'; Vue.filter('formatTime', function (val) { const date = new Date(val); const hour = date.getHours(); const minutes = date.getMinutes(); const seconds = date.getSeconds(); return `${hour} : ${minutes} : ${seconds}`; });
區域性元件過濾器(區域性過濾器直接在元件內寫即可):
export default { name: 'FilterDemo', /* 區域性過濾器 */ filters: { /* 格式化時間戳 */ formatDate (val) { const date = new Date(val); const year = date.getFullYear(); const month = date.getMonth() > 9 ? date.getMonth() + 1 : `0${date.getMonth() + 1}`; const day = date.getDate() > 9 ? date.getDate() + 1 : `0${date.getDate() + 1}`; return `${year}-${month}-${day}`; console.log(val); } }, data () { return { } } }
ok,接下來我們看下如何來使用:
<template>
<div>
<h2>vue過濾器:</h2>
<!-- 區域性過濾器 -->
<p><b>{{ 1533527037000 | formatDate }}</b></p>
<!-- 全域性過濾器 -->
<p><b>{{ 1533527037000 | formatTime }}</b></p>
</div>
</template>
在元件裡,按照文章開頭說的兩種方式即可,注意元件內註冊的過濾器(這裡是formatDate)只能在當前元件內部使用。