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