国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

Leo_chen / 1658人閱讀

摘要:前言最近開發的頁面以及功能大都以表格為主,接口獲取來的數據大都是需要經過處理,比如時間戳需要轉換,或者狀態碼的轉義。首先,還是在文件中定義一個狀態碼對應對象,這里我們將其對應的內容設為段落。

前言

最近開發的頁面以及功能大都以表格為主,接口獲取來的 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 的模板文件中隨意使用自定義函數了

包裝插件

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

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

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

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

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

    wuyumin 評論0 收藏0

發表評論

0條評論

Leo_chen

|高級講師

TA的文章

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