vue中的過濾器及其時(shí)間格式化問題
一、過濾器介紹
Vue.js 允許你自定義過濾器,可被用于一些常見的文本格式化。過濾器可以用在兩個(gè)地方:雙花括號插值和 v-bind 表達(dá)式 (后者從 2.1.0+ 開始支持)。過濾器應(yīng)該被添加在 JavaScript 表達(dá)式的尾部,由 管道 符號指示:
<!-- 在雙花括號中 -->
{{ message | capitalize }}
<!-- 在 `v-bind` 中 -->
<div v-bind:id="rawId | formatId"></div>
二、全局過濾器
在創(chuàng)建 Vue 實(shí)例之前全局定義過濾器
【 代碼示例 】
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>過濾器</title>
<script src="js/vue.js"></script>
</head>
<body>
<div id="app">
<input type="text" v-model="msg">
<div>{{ msg | strUpper }}</div>
</div>
<script>
// 定義一個(gè)全局過濾器,把字符串的第一個(gè)字符轉(zhuǎn)換為大寫
Vue.filter('strUpper', function (str) {
return str.charAt(0).toUpperCase() + str.slice(1)
})
var vm = new Vue({
el: '#app',
data: {
msg: ''
}
})
</script>
</body>
</html>
測試結(jié)果:

過濾器可以串聯(lián)。在一個(gè)插值表達(dá)式中可以使用多個(gè)過濾器,過濾器之間用管道符 隔開,過濾器從左到右的順序進(jìn)行執(zhí)行。
{{ message | filterA | filterB }}
在這個(gè)例子中,filterA 被定義為接收單個(gè)參數(shù)的過濾器函數(shù),表達(dá)式 message的值將作為參數(shù)傳入到函數(shù)中。然后繼續(xù)調(diào)用同樣被定義為接收單個(gè)參數(shù)的過濾器函數(shù) filterB,將 filterA 的結(jié)果傳遞到 filterB 中。
調(diào)用第一個(gè)過濾器會(huì)使輸入的字符串第一個(gè)字符轉(zhuǎn)成大寫,調(diào)用第二個(gè)過濾器替換字符串中的空格為逗號。
【 代碼示例 】
<div>{{ msg | strUpper | strReplace }}</div>
Vue.filter('strReplace', function (str) {
return str.replace(/ /g, ',')
})
測試結(jié)果:

【 知識拓展 】
slice() 方法可從已有的數(shù)組中返回選定的元素。
① 語法:
arrayObject.slice(start,end)
② 參數(shù):

③ 返回值 :
返回一個(gè)新的數(shù)組,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素。
三、局部過濾器
定義一個(gè)局部的過濾器,格式化當(dāng)前時(shí)間
【 代碼示例 】
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="winowh=device-winowh, initial-scale=1.0">
<title>過濾器學(xué)習(xí)2</title>
<script src="js/vue.js"></script>
</head>
<body>
<div id="app">
<div>當(dāng)前時(shí)間是: {{ dateTime }}</div>
<div>格式化后的時(shí)間是: {{ dateTime | dateFormat }}</div>
</div>
<script>
var vm = new Vue({
el: '#app',
data: {
dateTime: new Date(),
},
// 定義一個(gè)局部的過濾器,格式化當(dāng)前時(shí)間
filters: {
dateFormat: (dateTime) => {
var now = new Date(dateTime)
var y = now.getFullYear()
var m = (now.getMonth() + 1).toString().padStart(2, '0')
var d = now.getDate().toString().padStart(2, '0')
var hh = now.getHours().toString().padStart(2, '0')
var mm = now.getMinutes().toString().padStart(2, '0')
var ss = now.getSeconds().toString().padStart(2, '0')
// 過濾器中要有返回值
return `${y}-${m}-$tsg7ykm ${hh}:${mm}:${ss}`
}
}
})
</script>
</body>
</html>
測試結(jié)果:

注意:
當(dāng)有兩個(gè)名稱相同的全局過濾器和局部過濾器的時(shí)候,會(huì)以就近原則進(jìn)行調(diào)用過濾器,局部過濾器的優(yōu)先級高于全局過濾器。
【 知識拓展 】
padStart() 可以在字符串的開頭進(jìn)行字符補(bǔ)全。
① 語法:
str.padStart(targetLength [, padString])
② 參數(shù):

③ 返回值:
在原字符串開頭填充指定的填充字符串直到目標(biāo)長度所形成的新字符串。
借鑒網(wǎng)上的常用方法格式化時(shí)間
<body>
<div id="app">
<div>當(dāng)前時(shí)間是: {{ dateTime }}</div>
<div>格式化后的時(shí)間是: {{ dateTime | dateFormat('yyyy-MM-dd hh:mm:ss') }}</div>
</div>
<script>
Date.prototype.format = function (format) {
var dateMap = {
"M+": this.getMonth() + 1, // 月份
"d+": this.getDate(), // 日
"h+": this.getHours(), // 小時(shí)
"m+": this.getMinutes(), // 分
"s+": this.getSeconds(), // 秒
"q+": Math.floor((this.getMonth() + 3) / 3), // 季度
"S": this.getMilliseconds() // 毫秒
};
if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp
.$1.length));
for (var k in dateMap)
if (new RegExp("(" + k + ")").test(format)) format = format.replace(RegExp.$1, (RegExp.$1.length ==
1) ? (dateMap[k]) : (("00" + dateMap[k]).substr(("" + dateMap[k]).length)));
return format;
}
var vm = new Vue({
el: '#app',
data: {
dateTime: new Date(),
},
// 定義一個(gè)局部的過濾器,格式化當(dāng)前時(shí)間
filters: {
dateFormat: (dateTime, fmt) => {
var dt = new Date(dateTime)
return dt.format(fmt)
}
},
})
</script>
</body>
總結(jié)
到此這篇關(guān)于vue中的過濾器及其時(shí)間格式化問題的文章就介紹到這了,更多相關(guān)vue 過濾器時(shí)間格式化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue實(shí)現(xiàn)左右點(diǎn)擊滾動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)左右點(diǎn)擊滾動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
Vue自定義組件實(shí)現(xiàn)?v-model?的幾種方式
在?Vue?中,v-model?是一個(gè)常用的指令,用于實(shí)現(xiàn)表單元素和組件之間的雙向綁定,當(dāng)我們使用原生的表單元素時(shí),直接使用?v-model?是很方便的,本文給大家介紹了Vue自定義組件實(shí)現(xiàn)?v-model?的幾種方式,需要的朋友可以參考下2024-02-02
vue-element-admin?登陸及目錄權(quán)限控制的實(shí)現(xiàn)
本文主要介紹了vue-element-admin?登陸及目錄權(quán)限控制的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
element的表單校驗(yàn)證件號規(guī)則及輸入“無”的情況校驗(yàn)通過(示例代碼)
這篇文章主要介紹了element的表單校驗(yàn)證件號規(guī)則及輸入“無”的情況校驗(yàn)通過,使用方法對校驗(yàn)數(shù)據(jù)進(jìn)行過濾判斷,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2023-11-11
VUE v-model表單數(shù)據(jù)雙向綁定完整示例
這篇文章主要介紹了VUE v-model表單數(shù)據(jù)雙向綁定,結(jié)合完整實(shí)例形式分析了vue.js實(shí)現(xiàn)表單數(shù)據(jù)雙向綁定相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
vue-treeselect無法點(diǎn)擊問題(點(diǎn)擊無法出現(xiàn)拉下菜單)
這篇文章主要介紹了vue-treeselect無法點(diǎn)擊問題(點(diǎn)擊無法出現(xiàn)拉下菜單),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue項(xiàng)目調(diào)試的三種方法總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于vue項(xiàng)目調(diào)試的三種方法,大家可以根據(jù)需要選擇調(diào)試方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09
Vue監(jiān)聽localstorage變化的方法詳解
在日常開發(fā)中,我們經(jīng)常使用localStorage來存儲(chǔ)一些變量,這些變量會(huì)存儲(chǔ)在瀏覽中,對于localStorage來說,即使關(guān)閉瀏覽器,這些變量依然存儲(chǔ)著,方便我們開發(fā)的時(shí)候在別的地方使用,本文就給大家介紹Vue如何監(jiān)聽localstorage的變化,需要的朋友可以參考下2023-10-10

