1. 程式人生 > 實用技巧 >過濾器以及事件的獲取

過濾器以及事件的獲取

過濾器(filter)

我們在渲染資料的過程中,有一些內容並不是我們想要的文字格式,這個時候我們可以利用過濾器去實現我們的文字格式化。過濾器其實就是一個工具函式,通過執行這個函式,實現資料格式化。
比如:後端返回給前端的時間格式:時間戳 1604370847913
使用者要看到的資料格式: 2020/11/3 10:34 或者 2020-11-3
通過過濾符 ‘|’ 去呼叫過濾器

過濾器建立方式之區域性過濾器

檢視:
{{資料 | 過濾器名稱}}

邏輯程式碼
filters:{
toPrice(n,m){
//第一個引數是你要過濾的內容
//第二個引數是你呼叫過濾器的傳參
return 結果就是文字格式化的結果
}
}

其實在專案中,區域性過濾器用的比較少,因為程式碼檔案很多,每一個頁面都可能用到同一個過濾器比如時間轉化,如何解決?

利用全域性過濾器

過濾器建立方式之全域性過濾器

檢視
{{msg|toStr(4,6)}}

邏輯
//全域性過濾器 Vue.filter() 它有兩個引數,第一個引數是你要過濾的內容,第二個引數是你的邏輯函式,這個函式有兩個引數,①要過濾的內容,②要過濾內容的傳參
Vue.filter('toStr',(n,m)=>{
return n.substring(m)
})

過濾器的應用案例之時間轉化

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="./node_modules/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in newsList">
<p>新聞標題:{{item.title}}</p>
<p>發表時間:{{item.pTime | toTime('yyyy-MM-dd HH:mm:ss')}}</p>
<p>發表時間:{{item.pTime | toTime('yyyy/MM/dd HH:mm:ss')}}</p>
<p>發表時間:{{item.pTime | toTime}}</p>
<p>單價:{{item.price | toPrice}}</p>
</li>
</ul>
</div>
<script>
//字串補位的方法 padStart() 在字串前面補位 padEnd 在字串結尾補位
// let str = '你好'
// let result = str.padStart(5,'x')
// let result1 = str.padEnd(6,'x')
//建立全域性過濾器
Vue.filter("toTime", (timer,type) => {
let date = new Date(timer);
//獲取年份
let year = date.getFullYear();
//獲取月份
let month =((date.getMonth() + 1)+'').padStart(2,'0')
//獲取天數
let day = (date.getDate() +'').padStart(2,'0')
let hour = (date.getHours() +'').padStart(2,'0')
let minute = (date.getMinutes() +'').padStart(2,'0')
let second = (date.getSeconds() +'').padStart(2,'0')
console.log(day);
//return `${year}/${month}/${day}`
if(type=='yyyy-MM-dd HH:mm:ss'){
return `${year}-${month}-${day} ${hour}:${minute}:${second}`
}else if(type=='yyyy/MM/dd HH:mm:ss'){
return `${year}/${month}/${day} ${hour}:${minute}:${second}`
}else{
return `${year}-${month}-${day}`
}

});
Vue.filter("toPrice",(n)=>{
return n.toFixed(2)
})
new Vue({
el: "#app",
data: {
newsList: [
{
id: 1,
title: "華春瑩懟蓬佩奧,以彼之句式還施彼身!",
pTime: 1604374197699, //發表時間
price:99
},
{
id: 2,
title: "外交部迴應在美記者簽證實際延期僅三天",
pTime: 1608374197699, //發表時間
price:1999
},
{
id: 3,
title: "北京新增2例境外輸入新冠肺炎確診病例和1例無症狀感染者",
pTime: 1614374197699, //發表時間
price:799
},
{
id: 4,
title: "譚德塞被確認為新冠陽性病例接觸者後,世衛組織迴應",
pTime: 1623374197699, //發表時間
price:886
},
],
},
});
</script>
</body>
</html>