成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

如何正確的(?)利用 Vue.mixin() 偷懶

Leo_chen / 1708人閱讀

摘要:前言最近開發(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ù)了

包裝插件

接下來簡單應(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...

    godiscoder 評論0 收藏0
  • JS每日一題: Vuemixin怎么理解?

    摘要:兩個對象鍵名沖突時,取組件對象的鍵值對也使用同樣的策略進行合并。代碼理解全局混合也可以全局注冊混合對象。注意使用一旦使用全局混合對象,將會影響到所有之后創(chuàng)建的實例為自定義的選項注入一個處理器。 20190122 Vue中mixin怎么理解? mixin是為了讓可復(fù)用的功能靈活的混入到當(dāng)前組件中,混合的對象可以包含任意組件選項(生命周期,指令之類等等), mixin翻譯過來叫混合,高級的...

    jubincn 評論0 收藏0
  • 如何讓一個vue項目支持多語言(vue-i18n)

    摘要:引入是一個插件,主要作用就是讓項目支持國際化多語言。所以新建一個文件夾,存放所有跟多語言相關(guān)的代碼。目前包含三個文件。全局搜索發(fā)現(xiàn)一共有多個。 這兩天手頭的一個任務(wù)是給一個五六年的老項目添加多語言。這個項目龐大且復(fù)雜,早期是用jQuery實現(xiàn)的,兩年前引入Vue并逐漸用組件替換了之前的Mustache風(fēng)格模板。要添加多語言,不可避免存在很多文本替換的工作,這么龐雜的一個項目,怎么才能使...

    wuyumin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<