Vue過(guò)濾器filters的用法及時(shí)間戳轉(zhuǎn)換問(wèn)題
本文分享自華為云社區(qū)《三分鐘掌握Vue過(guò)濾器filters及時(shí)間戳轉(zhuǎn)換》,作者:北極光之夜。。
一.速識(shí)概念:
大家好呀,Vue的filters過(guò)濾器是比較常見(jiàn)的一個(gè)知識(shí)點(diǎn),下面我將結(jié)合時(shí)間戳轉(zhuǎn)換的例子帶你快速了解filters的用法~
按照官方的活來(lái)說(shuō),Vue.js 允許你自定義過(guò)濾器,可被用于一些常見(jiàn)的文本格式化。過(guò)濾器可以用在兩個(gè)地方:雙花括號(hào)插值和 v-bind 表達(dá)式 (后者從 2.1.0+ 開(kāi)始支持)。過(guò)濾器應(yīng)該被添加在 JavaScript 表達(dá)式的尾部,由“管道”符號(hào)指示。
簡(jiǎn)單來(lái)說(shuō)就是在filters過(guò)濾器里定義一個(gè)處理函數(shù),把函數(shù)名稱寫在管道符 “|” 后面,它就會(huì)處理管道符 “|” 前自定義的數(shù)據(jù),其中自定義的數(shù)據(jù)會(huì)自動(dòng)成為過(guò)濾器函數(shù)的參數(shù)。
<!-- 在雙花括號(hào)中 --> {{ message | capitalize }} <!-- 在 `v-bind` 中 --> <div v-bind:id="rawId | formatId"></div>
過(guò)濾器主要可以分為局部過(guò)濾器和全局過(guò)濾器,下面看詳細(xì)介紹。
二.局部過(guò)濾器:
1. 局部過(guò)濾器就是在一個(gè)組件的選項(xiàng)中定義本地的過(guò)濾器,只有該組件可以用。在我們一般開(kāi)發(fā)中,對(duì)于時(shí)間后端一般只會(huì)返回一個(gè)時(shí)間戳讓前端自己處理,下面比如定義一個(gè)轉(zhuǎn)換時(shí)間戳為日期格式的過(guò)濾器(注意步驟):
<template> <div> <!-- 4. 渲染數(shù)據(jù),設(shè)置過(guò)濾器 --> {{ times | conversion }} </div> </template> <script> export default { data() { return { // 1.模擬一個(gè)時(shí)間戳數(shù)據(jù) times: 1616959086000, }; }, // 2. 定義過(guò)濾器 filters: { //3.定義一個(gè)處理函數(shù),參數(shù)value為要處理數(shù)據(jù) conversion: function (value) { //調(diào)用Date的方法,處理時(shí)間戳 return new Date(value).toLocaleString(); }, }, }; </script>
結(jié)果,轉(zhuǎn)換成功:
2. 不僅如此,過(guò)濾器還可以串聯(lián),就是說(shuō)可以定義多個(gè)過(guò)濾器,比如下面,相當(dāng)于先用 conversion函數(shù)處理 times 這個(gè)數(shù)據(jù)得出結(jié)果,然后繼續(xù)用 againChange函數(shù)處理前面的結(jié)果得出最終結(jié)果:
{{ times | conversion | againChange }}
基本演示如下:
<template> <div> <!-- 5. 放過(guò)濾器 --> {{ times | conversion | againChange }} </div> </template> <script> export default { data() { return { // 1.模擬一個(gè)時(shí)間戳數(shù)據(jù) times: 1616959086000, }; }, // 2. 定義過(guò)濾器 filters: { //3.定義一個(gè)處理函數(shù),參數(shù)value為要處理數(shù)據(jù) conversion: function (value) { //調(diào)用Date的方法,處理時(shí)間戳 return new Date(value).toLocaleString(); }, //4.再定義一個(gè)過(guò)濾器,給數(shù)據(jù)前加上"時(shí)間為:"這幾個(gè)字 againChange: function (value) { return "時(shí)間為:" + value; }, }, }; </script>
3. 同時(shí),過(guò)濾器也是可以接收參數(shù)的, 比如我們改進(jìn)第1小點(diǎn)的例子,把時(shí)間戳轉(zhuǎn)換為能指定格式的時(shí)間格式,將想要的時(shí)間格式作為過(guò)濾器參數(shù),具體用法如下(注意步驟):
<template> <div> <!-- 4. 放過(guò)濾器,同時(shí)傳參數(shù),返回指定格式的時(shí)間 --> {{ times | conversion("yyyy-MM-dd HH:mm:ss 星期w") }} </div> </template> <script> export default { data() { return { // 1.模擬一個(gè)時(shí)間戳數(shù)據(jù) times: 1616959086000, }; }, // 2. 定義過(guò)濾器 filters: { //3.定義一個(gè)處理函數(shù),參數(shù)value為要處理數(shù)據(jù),format為傳入?yún)?shù) conversion: function (value, format) { //這個(gè)轉(zhuǎn)換方法就不介紹了,看看就行,過(guò)濾器用法為主 var date = new Date(value); function addZero(date) { if (date < 10) { return "0" + date; } return date; } let getTime = { yyyy: date.getFullYear(), yy: date.getFullYear() % 100, MM: addZero(date.getMonth() + 1), M: date.getMonth() + 1, dd: addZero(date.getDate()), d: date.getDate(), HH: addZero(date.getHours()), H: date.getHours(), hh: addZero(date.getHours() % 12), h: date.getHours() % 12, mm: addZero(date.getMinutes()), m: date.getMinutes(), ss: addZero(date.getSeconds()), s: date.getSeconds(), w: (function () { let a = ["日", "一", "二", "三", "四", "五", "六"]; return a[date.getDay()]; })(), }; for (let i in getTime) { format = format.replace(i, getTime[i]); } return format; }, }, }; </script>
結(jié)果如下:
三.全局過(guò)濾器:
既然叫全局,那自然是在創(chuàng)建 Vue 實(shí)例之前全局定義過(guò)濾器,配置好后全部組件直接用就行。一般在自定義的一個(gè)文件里專門定義。比如還是上面的處理時(shí)間戳的過(guò)濾器,用法如下:
1.在src目錄下定義filters文件夾,同時(shí)在文件夾里定義一個(gè)filters.js文件:
2.filters.js文件代碼如下:
const conversion = function (value, format) { var date = new Date(value); function addZero(date) { if (date < 10) { return "0" + date; } return date; } let getTime = { yyyy: date.getFullYear(), yy: date.getFullYear() % 100, MM: addZero(date.getMonth() + 1), M: date.getMonth() + 1, dd: addZero(date.getDate()), d: date.getDate(), HH: addZero(date.getHours()), H: date.getHours(), hh: addZero(date.getHours() % 12), h: date.getHours() % 12, mm: addZero(date.getMinutes()), m: date.getMinutes(), ss: addZero(date.getSeconds()), s: date.getSeconds(), w: (function () { let a = ["日", "一", "二", "三", "四", "五", "六"]; return a[date.getDay()]; })(), }; for (let i in getTime) { format = format.replace(i, getTime[i]); } return format; } export { conversion //通過(guò)此處導(dǎo)出方法 }
3.在main.js里引入全局過(guò)濾器:
設(shè)置全局過(guò)濾器格式就是Vue.filter(‘過(guò)濾器名稱',對(duì)應(yīng)處理函數(shù));
import {conversion} from './filters/filters.js' Vue.filter('conversion', conversion);
4.在某個(gè)組件直接可以使用:
<template> <div> <!-- 2. 放過(guò)濾器,同時(shí)傳參,為指定格式時(shí)間 --> {{ times | conversion("yyyy-MM-dd HH:mm:ss 星期w") }} </div> </template> <script> export default { data() { return { // 1.模擬一個(gè)時(shí)間戳數(shù)據(jù) times: 1616959086000, }; }, }; </script>
一樣的結(jié)果:
四.擴(kuò)展:
可以發(fā)現(xiàn),filters過(guò)濾器在用法上與computed計(jì)算屬性有點(diǎn)像,那它們區(qū)別是什么呢?
- filters 可以傳參,但是不可以訪問(wèn)this。不具備緩存功能。同時(shí)filters可以串聯(lián)??梢栽诰植亢腿衷O(shè)置。filter比較簡(jiǎn)單,只在顯式調(diào)用時(shí)觸發(fā),一般應(yīng)用在模板渲染上。
- computed不可以傳參,可以訪問(wèn)this,針對(duì)的是變量的操作。背后的處理邏輯比較復(fù)雜,具有緩存能力,在組件內(nèi)普適性更強(qiáng),因此適用于復(fù)雜的數(shù)據(jù)轉(zhuǎn)換、統(tǒng)計(jì)等場(chǎng)景。
五.總結(jié):
上面就是filters過(guò)濾器的大致內(nèi)容了??偟膩?lái)說(shuō),filters過(guò)濾器可以分為局部過(guò)濾器和全局過(guò)濾器。局部過(guò)濾器在組件內(nèi)部有效,全局過(guò)濾器在每個(gè)組件都有效。其中,可以設(shè)置多個(gè)過(guò)濾器和傳參數(shù)給過(guò)濾器。一般過(guò)濾器應(yīng)用在一些簡(jiǎn)單的數(shù)據(jù)渲染上。
到此這篇關(guān)于Vue過(guò)濾器filters及時(shí)間戳轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Vue過(guò)濾器filters時(shí)間戳轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用v-memo緩存模板子樹(shù)提高應(yīng)用性能詳解
這篇文章主要為大家介紹了使用v-memo緩存模板子樹(shù)提高應(yīng)用性能詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09單頁(yè)面vue引入百度統(tǒng)計(jì)的使用方法示例詳解
在網(wǎng)上各種找不到vue項(xiàng)目加入百度統(tǒng)計(jì)的代碼與實(shí)現(xiàn),自己探索出了一套加入百度統(tǒng)計(jì)的辦法,下面這篇文章主要給大家介紹了關(guān)于單頁(yè)面vue引入百度統(tǒng)計(jì)的使用方法,需要的朋友可以參考下2018-10-10如何通過(guò)Vue3+Element?Plus自定義彈出框組件
這篇文章主要給大家介紹了關(guān)于如何通過(guò)Vue3+Element?Plus自定義彈出框組件的相關(guān)資料,彈窗是前端開(kāi)發(fā)中的一種常見(jiàn)需求,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-05-05Vue?Hook?封裝通用型表格的詳細(xì)過(guò)程
這篇文章主要介紹了Vue?Hook?封裝通用型表格,設(shè)計(jì)通用型表格組件首先,需要設(shè)計(jì)一個(gè)基礎(chǔ)的表格組件,它接受列配置、數(shù)據(jù)和分頁(yè)信息等參數(shù),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08