摘要:前言最近開發(fā)的頁面以及功能大都以表格為主,接口獲取來的數(shù)據(jù)大都是需要經(jīng)過處理,比如時間戳需要轉(zhuǎn)換,或者狀態(tài)碼的轉(zhuǎn)義。首先,還是在文件中定義一個狀態(tài)碼對應(yīng)對象,這里我們將其對應(yīng)的內(nèi)容設(shè)為段落。
前言
最近開發(fā)的頁面以及功能大都以表格為主,接口獲取來的 JSON 數(shù)據(jù)大都是需要經(jīng)過處理,比如時間戳需要轉(zhuǎn)換,或者狀態(tài)碼的轉(zhuǎn)義。對于這樣的問題,各大主流框架都提供了類似于過濾的方法,在 Vue 中,一般是在頁面上定義 filter 然后在模板文件中使用 | 進行處理。
這種方法和以前的遍歷數(shù)組洗數(shù)據(jù)是方便了許多,但是,當(dāng)我發(fā)現(xiàn)在許多的頁面都有相同的 filter 的時候,每個頁面都要復(fù)制一遍就顯的很蛋疼,遂決定用 Vue.mixin() 實現(xiàn)一次代碼,無限復(fù)用。
最后,還可以將所有的 filter 包裝成一個 vue 的插件,使用的時候調(diào)用 Vue.use() 即可,甚至可以上傳 npm 包,開發(fā)不同的項目的時候可以直接 install 使用。(考慮到最近更新的比較快,遂打包上傳這步驟先緩緩,等版本稍微穩(wěn)定了之后來補全)
正文閑話說夠,開始正題。
Vue.mixin 為何物學(xué)習(xí)一個新的框架或者 API 的時候,最好的途徑就是上官網(wǎng),這里附上 Vue.mixin() 官方說明。
一句話解釋,Vue.mixin() 可以把你創(chuàng)建的自定義方法混入所有的 Vue 實例。
示例代碼
Vue.mixin({ created: function(){ console.log("success") } })
跑起你的項目,你會發(fā)現(xiàn)在控制臺輸出了一坨 success。
效果出來了意思也就出來了,所有的 Vue 實例的 created 方法都被改成了我們自定義的方法。
使用 Vue.mixin()接下來的思路很簡單,我們整合所有的 filter 函數(shù)到一個文件,在 main.js 中引入即可。
在上代碼之前打斷一下,代碼很簡單,但是我們可以寫的更加規(guī)范化,關(guān)于如何做到規(guī)范,在 Vue 的官網(wǎng)有比較詳細(xì)的 風(fēng)格指南 可以參考。
因為我們的自定義方法會在所有的實例中混入,如果按照以前的方法,難免會有覆蓋原先的方法的危險,按照官方的建議,混入的自定義方法名增加前綴 $_ 用作區(qū)分。
創(chuàng)建一個 config.js 文件,用于保存狀態(tài)碼對應(yīng)的含義,將其暴露出去
export const typeConfig = { 1: "type one", 2: "type two", 3: "type three" }
再創(chuàng)建一個 filters.js 文件,用于保存所有的自定義函數(shù)
import { typeConfig } from "./config" export default { filters: { $_filterType: (value) => { return typeConfig[value] || "type undefined" } } }
最后,在 main.js 中引入我們的 filters 方法集
import filter from "./filters" Vue.mixin(filter)
接下來,我們就可以在 .vue 的模板文件中隨意使用自定義函數(shù)了
{{typeStatus | $_filterType}}包裝插件接下來簡單應(yīng)用一下 Vue 中插件的制作方法。創(chuàng)建插件之后,就可以 Vue.use(myPlugin) 來使用了。
首先附上插件的 官方文檔。
一句話解釋,包裝的插件需要一個 install 的方法將插件裝載到 Vue 上。
關(guān)于 Vue.use() 的源碼
function initUse (Vue) { Vue.use = function (plugin) { var installedPlugins = (this._installedPlugins || (this._installedPlugins = [])); if (installedPlugins.indexOf(plugin) > -1) { return this } // additional parameters var args = toArray(arguments, 1); args.unshift(this); if (typeof plugin.install === "function") { plugin.install.apply(plugin, args); } else if (typeof plugin === "function") { plugin.apply(null, args); } installedPlugins.push(plugin); return this }; }很直觀的就看到他在最后調(diào)用了 plugin.install 的方法,我們要做的就是處理好這個 install 函數(shù)即可。
上代碼
config.js 文件依舊需要,這里保存了所有狀態(tài)碼對應(yīng)的轉(zhuǎn)義文字
創(chuàng)建一個 myPlugin.js 文件,這個就是我們編寫的插件
import { typeConfig } from "./config" myPlugin.install = (Vue) => { Vue.mixin({ filters: { $_filterType: (value) => { return typeConfig[value] || "type undefined" } } }) } export default myPlugin插件的 install 函數(shù)的第一個參數(shù)為 Vue 的實例,后面還可以傳入一些自定義參數(shù)。
在 main.js 文件中,我們不用 Vue.mixin() 轉(zhuǎn)而使用 Vue.use() 來完成插件的裝載。
import myPlugin from "./myPlugin" Vue.use(myPlugin)至此,我們已經(jīng)完成了一個小小的插件,并將我們的狀態(tài)碼轉(zhuǎn)義過濾器放入了所有的 Vue 實例中,在 .vue 的模板文件中,我們可以使用 {{ typeStatus | $_filterType }} 來進行狀態(tài)碼轉(zhuǎn)義了。
結(jié)語Vue.mixin() 可以將自定義的方法混入所有的 Vue 實例中。
本著快速開發(fā)的目的,一排腦門想到了這個方法,但是這是否是一個好方法有待考證,雖然不是說擔(dān)心會對原先的代碼造成影響,但是所有的 Vue 實例也包括了第三方模板。
本文可以隨意轉(zhuǎn)載,只要附上原文地址即可。
如果您認(rèn)為我的博文對您有所幫助,請不吝贊賞,點贊也是讓我動力滿滿的手段 =3=。
待完善 發(fā)布 npm 包 新增項 在 v-html 中騷騷的使用 filter (2018年05月28日)最近碰到一個問題,也是關(guān)于狀態(tài)碼過濾的,但是實現(xiàn)的效果是希望通過不同的狀態(tài)碼顯示不同的 icon 圖標(biāo),這個就不同于上面的文本過濾了,上文使用的 {{ styleStatus | $_filterStyleStatus }} 是利用 v-text 進行渲染,若碰到需要渲染 html 標(biāo)簽就頭疼了。
按照前人的做法,是這樣的,我隨意上一段代碼。
... ...不!這太不 fashion 太不 cool,我本能的拒絕這樣的寫法,但是,問題還是要解決,我轉(zhuǎn)而尋找他法。
在看 Vue 的文檔的時候,其中一個 API $options 官方文檔 就引起了我的注意,我正好需要一個可以訪問到當(dāng)前的 Vue 實例的 API,一拍腦袋,方案就成了。
首先,還是在 config.js 文件中定義一個狀態(tài)碼對應(yīng)對象,這里我們將其對應(yīng)的內(nèi)容設(shè)為 html 段落。
export const iconStatus = { 1: "", 2: "", 3: "", 4: "" }接著,我們在 filters.js 文件中引入他,寫法還是和以前的 filters 一樣。
import { iconStatus } from "./config" export default { $_filterIcon: (value) => { return iconStatus[value] || "icon undefined" } }重頭戲在這里,我們在模板文件中需要渲染的地方,使用 v-html 來進行渲染。
大功告成,以后需要根據(jù)狀態(tài)碼來渲染 icon 的地方都可以通過這個辦法來完成了。
事實證明,懶并不一定是錯誤的,關(guān)鍵看懶的方向,雖然本篇博客寫的標(biāo)題是 偷懶 ,但其實我只是對于重復(fù)性的無意義的搬運代碼而感到厭煩,在尋找對應(yīng)解決辦法的時候可是一點都沒偷懶,相反的,在尋求更快更好更方便的方法的時候,我逐漸找回了當(dāng)初敲代碼的樂趣。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://hztianpu.com/yun/95214.html
相關(guān)文章
vue中 利用混入定義全局變量、函數(shù)、篩選器
摘要:說一種沒人發(fā)的,利用混入來實現(xiàn)全局變量和函數(shù)。這種方法優(yōu)點是會有方法變量篩選器提示。一文件進行全局混入一文件,我是把方法變量篩選器這三個分別寫到三個文件里面了,方便后期維護。 說一種沒人發(fā)的,利用混入mixins來實現(xiàn)全局變量和函數(shù)。mixins里面的方法、變量、篩選器會和組件里面的方法、變量、篩選器合并。這種方法優(yōu)點是ide會有方法、變量、篩選器提示。 一、main.js文件 imp...
JS每日一題: Vue中mixin怎么理解?
摘要:兩個對象鍵名沖突時,取組件對象的鍵值對也使用同樣的策略進行合并。代碼理解全局混合也可以全局注冊混合對象。注意使用一旦使用全局混合對象,將會影響到所有之后創(chuàng)建的實例為自定義的選項注入一個處理器。 20190122 Vue中mixin怎么理解? mixin是為了讓可復(fù)用的功能靈活的混入到當(dāng)前組件中,混合的對象可以包含任意組件選項(生命周期,指令之類等等), mixin翻譯過來叫混合,高級的...
如何讓一個vue項目支持多語言(vue-i18n)
摘要:引入是一個插件,主要作用就是讓項目支持國際化多語言。所以新建一個文件夾,存放所有跟多語言相關(guān)的代碼。目前包含三個文件。全局搜索發(fā)現(xiàn)一共有多個。 這兩天手頭的一個任務(wù)是給一個五六年的老項目添加多語言。這個項目龐大且復(fù)雜,早期是用jQuery實現(xiàn)的,兩年前引入Vue并逐漸用組件替換了之前的Mustache風(fēng)格模板。要添加多語言,不可避免存在很多文本替換的工作,這么龐雜的一個項目,怎么才能使...
發(fā)表評論
0條評論
閱讀 3164·2021-10-27 14:15
閱讀 3173·2021-09-07 10:18
閱讀 1433·2019-08-30 15:53
閱讀 1698·2019-08-26 18:18
閱讀 3484·2019-08-26 12:15
閱讀 3578·2019-08-26 10:43
閱讀 853·2019-08-23 16:43
閱讀 2377·2019-08-23 15:27