麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

如何換個角度使用VUE過濾器詳解

2019-11-19 10:49:45
字體:
來源:轉載
供稿:網友

前言

過濾器在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穿透功能。為了方便閱讀,就且聽下回分解吧。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品日韩欧美 | 色视频在线播放 | 日日夜av| 中国大陆高清aⅴ毛片 | 亚洲午夜精选 | 国产精品自拍片 | 黄色片免费看网站 | 欧美精品在线视频观看 | 久久成人福利 | 欧美男女爱爱视频 | 中文字幕免费看 | 日本高清电影在线播放 | 成人毛片av在线 | 91精品国产日韩91久久久久久360 | 成人性爱视频在线观看 | 久久久久久久久久久久久久久伊免 | av黄色在线免费观看 | 成人在线观看网 | 久久久视频免费观看 | 俄罗斯16一20sex牲色另类 | 色播亚洲| 9999视频| 久久精品成人 | 成人在线视频一区 | 国产精品久久久久网站 | 九九热视频这里只有精品 | 一级黄色片武则天 | 欧美三级毛片 | 久久艹艹艹| 91色琪琪电影亚洲精品久久 | 国产精品久久久久久久久久免 | 亚洲va国产va | 日本在线播放一区 | www.99tv| 成人福利视频在线观看 | 国产正在播放 | 成人精品久久 | 国产91丝袜在线熟 | 91精品国产综合久久久动漫日韩 | 国产流白浆高潮在线观看 | 日韩精品久久久久久久九岛 |