1. 程式人生 > >換個角度使用VUE過濾器

換個角度使用VUE過濾器

換個角度使用VUE過濾器

過濾器在Vue中的主要用於文字格式化,如小寫轉大小,日期格式化等操作。官方對這個功能介紹也很簡單,不過確實很簡單,就一個函式而已。但最近在做兩款APP時,遇到一些特殊的需求。然後就對vue中的filter一些用法結合原始碼好好的梳理了下。下邊我們以一個日期格式化展開討論。

1. 定義一個日期格式化函式

都9012了,我們就採用 ES Module的寫法,在vue初始化的專案src的檔案中新建一個filters資料夾,並在其中新增DateFmt.js檔案,程式碼如下

export function DateFmt(date, fmt) {
if (date == null) return null;
var o = {
    "M+": date.getMonth() + 1, // 月份
    "d+": date.getDate(), // 日
    "h+": date.getHours(), // 小時
    "m+": date.getMinutes(), // 分
    "s+": date.getSeconds(), // 秒
    "q+": Math.floor((date.getMonth() + 3) / 3), // 季度
    "S": date.getMilliseconds()
};
if (/(y+)/.test(fmt))
    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt))
        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}

2. 使用過濾器 DateFmt

定義好函式後,我們採用全域性註冊filter的方式。在main.js中使用import { DateFmt } from '@/filters/DateFmt.js' 匯入我們上邊定義的函式。 使用Vue.filter("DateFmt", DateFmt) 完成filter全域性註冊。

components資料夾中,新增我們的測試元件DateFormat.vue,在該檔案template>div節點下輸入{{new Date()|DateFmt('yyyy-MM-dd hh:mm:ss')}} 然後在app.vue引入我們剛新新增的元件,執行,你就會在看到當前日期已經按照我們需要的格式顯示在網頁上。是的,就是這麼簡單,那完了麼?

3. 在JS中使用 DateFmt

好奇的朋友會發現,我們定義的filter都是在template中使用的,那我如何在js程式碼中使用呢?當然,在開發這兩個app期間,減少資料轉換的次數,有了這樣的需求。

3.1 在元件頁面匯入函式

回到開頭,我們強調了一下,過濾器其實就是一個函式。既然是函式,那引入就好了。所以在我們最初建立 DateFormat.vue 單檔案元件的<script>塊中使用import { DateFmt } from '@/filters/DateFmt.js'匯入我們的函式。程式碼如下:

<script>
import { DateFmt } from '@/filters/DateFmt.js';
export default {
data(){
return{
curDateImportFilter: DateFmt(new Date(), 'yyyy-MM-dd hh:mm:ss')
}}}
</script>

在我們<template>中新加一個元素,並繫結 curDateImportFilter屬性,執行 npm run serve 回到瀏覽器,你就會看到兩個格式化日期。這樣好嗎?我們多了一個import , 雖然實現了,但覺得不夠好。

3.2 使用Vue.filter 返回過濾器

如果我們仔細看官方文件,就會發現官說明了,通過 Vue.filter("filter")返回定義的函式 ,所以Vue.filter不僅可以註冊,還可以返回。
我們繼續在data中新增屬性 :

curDateVueFilter: Vue.filter("DateFmt")(new Date(), 'yyyy-MM-dd hh:mm:ss')

通過上邊的步驟繫結該屬性,你會在瀏覽器上看到三個格式化好的日期。要使用Vue.filter,我們不得不額外的匯入import Vue from 'vue'。跟上邊一樣,雖然實現了,但不夠好。

3.3 使用例項屬性$options

在vue元件,每個元件都有各自的屬性,這些屬性大多掛載中屬性 $options中,在chrome瀏覽器列印$vm0資訊,我們就找到filter的資訊。這裡科普一下,在安裝vue開發者工具後$vm0表示我們當前選擇的元件,結果如下圖所示:

從圖形上看,當前元件的filters為一個物件,並不能直接找到,不過展開至__proto__原型上看到了我們的DateFmt方法。好了現在我們在繼續在data中新增屬性

curDateOptFilter: this.$options.filters.DateFmt(new Date(), 'yyyy-MM-dd hh:mm:ss')

是的,採用這個方式,就不用再引入vue或者函數了,跟直接在template使用一樣。簡潔方便,感覺好多了。在深入一點,通過除錯我們就會發現 Vue.filter 是呼叫options.filters原型上的方法,如下圖所示

4. 總結

再簡單的功能,也有你想不到的用法。做開發,還是要會發散。本來這篇文章還想分享一下 vue 中scope css穿透功能。為了方便閱讀,就且聽下回分解吧。

歡迎感興趣的朋友關注我的微信訂閱號"小院不小",或者點選下方的二維碼關注。我將多年開發中遇到的難點,以及一些有意思的功能,體會都會一一發布到我的訂閱號中

閒來無事,採用cocos creator開發了一個小遊戲,感興趣的朋友一個可以來玩玩

相關推薦

角度使用VUE過濾器

換個角度使用VUE過濾器 過濾器在Vue中的主要用於文字格式化,如小寫轉大小,日期格式化等操作。官方對這個功能介紹也很簡單,不過確實很簡單,就一個函式而已。但最近在做兩款APP時,遇到一些特殊的需求。然後就對vue中的filter一些用法結合原始碼好好的梳理了下。下邊我們以一個日期格式化展開討論。 1. 定義

角度深入理解GlusterFS(三)

nbsp 負載均衡 高可用性 哈希算法 iops 當前 最新 文件目錄 moosefs GlusterFS(GNU ClusterFile System)是一個開源的分布式文件系統,它的歷史可以追溯到2006年,最初的目標是代替Lustre和GPFS分布式文件系統。經過八年

角度理解python元編程

應該 鴨子類型 字符 就是 yacc 玩具 方法 進入 一個 元編程這個概念本身不新,只是沒有發現原來很早就在用這個東西,所以python等下再聊,先理一理怎麽理解編程這個事情。我仔細思考,其實是在做一件設計想法,紀錄想法,實現想法的過程。怎麽樣設計想法?應該需要一些圖形,

角度理解DQN

話說有2個同學小明和大明,小明三年級,大明四年級。有一天,大明做一道語文填空,填一句三年級背誦的古文句子,大明三年級的書早就扔掉了,只好求助附近的小明,小明剛背誦過這篇古文,馬上就給出了填空答案,大明恍然大悟,順利的填上了答案。舉一反三,這個道理告訴我們,特別是程式設計師,只要涉及到數學,十年工作經驗有什麼用

角度思考

esc roo div view names cst mat 函數 一個 換個角度思考 https://ac.nowcoder.com/acm/contest/275/E 題目描述 給定一個序列,有多次詢問,每次查詢區間裏小於等於某個數的元素的個數 即對於詢問 (l,r

角度理解Android的AIDL原理

本文行思路 本篇文章筆者談論的是android使用AIDL進行程序間通訊原理,但本文不打算一上來就介紹如何使用AIDL,本文會先假設Android沒有提供AIDL我們應該如何“用自己的方式”實現IPC,介紹完這一點之後,本文再對比AIDL這種方式實現IPC,並嘗試理解AIDL背後程式

角度理解嶺迴歸

    今天要寫的部落格說簡單也簡單,是大家熟悉的線性模型,但是我們通過線性模型的不足,我們匯出嶺迴歸,下面是部落格的結構。     1.線性模型     2.線性模型

角度看 JavaScript 中的 (this) => { 整理 (JavaScript 深入之從 ECMAScript 規範解讀 this ) }

前言 這篇文章的產生,是基於冴羽大大的JavaScript 深入之從 ECMAScript 規範解讀 this的思考,這是對應掘金鍊接,文中詳細的論述了前因後果,建議各位都可以去了解一下,很有幫助,並且這篇文章在寫作時,也有冴羽大大的幫助,再次表示感謝~ 文中的 ES5 規範是參考 顏海鏡大大 的譯本,也

角度看問題

 不識廬山真面目,只緣身在此山中 各位同仁: 大家好! 這幾周以來我們連續發生了多起重大產品質量事故,在這些異常發生之後我一直通過OA和內部郵件系統關注我們同事對異常的反應速度,處理異常的方法和處理異常的結果,嘗試著第一時間去了解現狀。在看了同事們的反應及處理方法之後,

角度看Aurora:緣何“萬能”?對比TiDB有何不同?

作者介紹 房曉樂(蔥頭巴巴),PingCAP 資深解決方案架構師,前美團資料庫專家、美團雲 CDS 架構師、前搜狗、百度資深 DBA,擅長研究各種資料庫架構,NewSQL 佈道者。 2017年,Amazon 在 SIGMOD 上發表了論文《Amazon Aurora: Design Consider

牛客小白9 角度思考(離線+樹狀陣列)

title: 牛客小白9 換個角度思考(離線+樹狀陣列) date: 2018-11-29 15:25:18 tags: [離線,樹狀陣列] categories: ACM 題目連結 題目描述 給定一個序列,有多次詢問,每次查詢區間裡小於等於某個數的元素的個數 即對於詢問

角度看GAN:另一種損失函式

選自Medium,作者:Phúc Lê,機器之心編譯,參與:張璽。 「本質上,GAN 就是另一種損失函式。」 Jeremy Howardf 老師曾在生成對抗網路(GAN)課程中說過:「……本質上,GAN 就是另一種損失函式。」 本文將在適合的相關背景下討論上面的觀點,並向大家闡述 GAN 這種「學

角度感受華為雲的GPU雲伺服器

    昨天突發奇想,想看看GPU雲服務打遊戲的效果怎麼樣,於是就有了這篇文章。使用的過程中,真的被華為雲GPU雲伺服器的能力驚到了,真的是被驚到了啊,被驚到了,重要的事情說三遍。    雖然在雲上玩PC遊戲沒什麼卵用,但可以反映GPU雲伺服器的綜合能力,並且當下流行一些手遊

角度看技術人的35歲問題

首先宣告,我已經超過35歲了,但是自認為還不算老。35歲還能不能繼續做純技術,還能不能很好的程式

角度聊效率

首發於微信公眾號《前端成長記》,寫於 2020.01.22 換個角度聊效率 PPT地址 內容源自作者上個月部門內部的分享,本文將圍繞著以下四個角色來聊: 互動設計 視覺設計 前端開發 後端開發 為什麼要聊這個 京東數科CEO陳生強在杭州烏鎮網際網路大會上說道:產業數字化核心本就是去解決企業的效率問題。

【俗話說】角度理解TCP的三次握手和四次揮手

PS:通俗一點的解釋都會在引用塊中 Nothing is true, Everything is permitted. 0. 什麼是TCP TCP,全稱Transmission Control Protocol,是一種面向連線、可靠的、基於位元組流的單播協議。與我們常說的TCP/IP協議不同,T

角度學習ASP.NET Core中介軟體

## 中介軟體真面目 關於ASP.NET Core中介軟體是啥,簡單一句話描述就是:用來處理HTTP請求和響應的一段邏輯,並且可以決定是否把請求傳遞到`管道`中的下一個中介軟體! 上面只是概念上的一種文字描述,那問題來了,中介軟體在程式中到底是個啥:question: 一切還是從`IApplicatio

角度,聊聊全鏈路壓測

前言 之前自己也寫過好幾篇關於全鏈路壓測的文章或者部落格,最近看了infoQ上infoQ-數列科技楊德華的專欄,覆盤了下自己以往在全鏈路壓測實施方面的工作,發覺還有很多可以做的更好的地方。 就以這篇文章來做個總結,順帶說說我自己實施全鏈路壓測工作方面的一些收穫和經驗。 18年初:聊聊全鏈路壓測 19年初:再談

思維,boot結合vue做後臺管理

可以新增,可以刪除。動態的新增資料。 不用操作dom,只要操作json資料即可。 <form class="form-horizontal addForm" id="edit_form" @submit="checkForm" method="post

懷才當遇網 | 方式看世界

content ive bsp img 團隊 個人 做出 fail 工具 “如何讓豬上樹?” 某位老板給出了4個方案: 方案1:讓豬穿李寧,一切皆可能;讓豬穿特步,不走尋常路; 方案2:給豬美好的願景,告訴它你就是猴子,簡稱畫餅; 方案3:把樹砍倒,讓豬站上去