欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一篇文章告訴你如何編寫Vue插件

 更新時(shí)間:2021年11月19日 15:23:59   作者:小帥的編程筆記  
這篇文章主要為大家介紹了如何編寫Vue插件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

什么是插件

在Vue框架中,如果需要給Vue增加一些我們需要的功能,Vue給我留了一個(gè)插件的方式,我們可以編寫自己的插件,然后在Vue中去注冊插件,然后去使用他。

通過Vue插件我們可以實(shí)現(xiàn)一些Vue框架沒有的功能,也可以使用別人寫好的插件,來幫助我們更快速的實(shí)現(xiàn)一些功能。

插件的功能范圍并沒有嚴(yán)格的要求,根據(jù)官方的示例來說,一般有下面幾種:

1.添加全局方法或者屬性,如:vue-custom-element,我們可以用插件方式添加一些全局組件,然后可以在任何頁面或者組件當(dāng)中去使用它。這也是Element UI或者Ant Design組件庫安裝組件的方式。

2.添加全局資源:指令/過渡等。如:vue-touch,我們也可以用插件方式去添加一些全局的自定義指令,來實(shí)現(xiàn)我們的功能。

3.通過全局 mixin 來添加一些組件選項(xiàng)。(如vue-router)

4.添加全局實(shí)例方法,通過把它們添加到 config.globalProperties 上實(shí)現(xiàn)。比如常見我們可能會把$http請求放在全局實(shí)例方法上,方便我們在任何頁面或者組件中去使用,不再需要去顯式的import引入它。

5.一個(gè)庫,提供自己的 API,同時(shí)提供上面提到的一個(gè)或多個(gè)功能。如 vue-router、vuex等。

編寫插件

編寫Vue插件其實(shí)很簡單,一個(gè)插件其實(shí)就是一個(gè)對象,或者是一個(gè)函數(shù),如果是對象的話,那么就會調(diào)用對象里的 install 方法,如果是函數(shù)就會調(diào)用這個(gè)函數(shù)。無論是調(diào)用對象的 install 方法還是調(diào)用函數(shù)的方式,它們都會收到兩個(gè)參數(shù):1是由 Vue 的 createApp 生成的 app 對象,2是用戶傳入的參數(shù)。

下面我們從最簡單的一個(gè)i18n功能開始。

一般我們都會把插件放在plugins文件夾下,這樣易于維護(hù)和管理

我們創(chuàng)建一個(gè)i18n.js文件

export default {
  install: (app, options) => {
    // 編寫插件代碼
  }
}

比如我們需要一個(gè)全局的函數(shù)來翻譯整個(gè)程序,我們可以將方法掛在app.config.globalProperties屬性上,來暴露出來。

函數(shù)接收一個(gè)key字符串,我們將使用它在用戶提供的參數(shù)對象中查找轉(zhuǎn)換后的字符串。

// plugins/i18n.js
export default {
  install: (app, options) => {
    app.config.globalProperties.$translate = key => {
      return key.split('.').reduce((o, i) => {
        if (o) return o[i]
      }, options)
    }
  }
}

假設(shè)用戶使用插件時(shí),將在 options 參數(shù)中傳遞一個(gè)包含翻譯后的鍵的對象。我們的 $translate 函數(shù)將使用諸如 greetings.hello 之類的字符串,這樣查找到的值將會為 Bonjour!。

例如:

greetings: {
  hello: 'Bonjour!'
}

我們還可以使用inject來提供功能或者屬性,比如,我們可以允許應(yīng)用程序訪問 options 參數(shù)以能夠使用在安裝插件時(shí)傳入的參數(shù)對象。

// plugins/i18n.js
export default {
  install: (app, options) => {
    app.config.globalProperties.$translate = key => {
      return key.split('.').reduce((o, i) => {
        if (o) return o[i]
      }, options)
    }
    app.provide('i18n', options)
  }
}

現(xiàn)在我們就可以使用 inject[i18n] 注入到一些頁面或者組件中來訪問該對象。

因?yàn)椋琕ue給我提供了app對象作為插件的第一個(gè)參數(shù),所以插件可以使用所有其他功能,例如使用 mixin 和 directive。要了解有關(guān) createApp 和應(yīng)用程序?qū)嵗母嘈畔ⅲ埐榭?Application API 文檔。

比如下面我們在插件內(nèi),又注冊了新的自定義指令,還有全局的mixin方法:

// plugins/i18n.js
export default {
  install: (app, options) => {
    app.config.globalProperties.$translate = (key) => {
      return key.split('.')
        .reduce((o, i) => { if (o) return o[i] }, options)
    }
    app.provide('i18n', options)
    app.directive('my-directive', {
      mounted (el, binding, vnode, oldVnode) {
        // some logic ...
      }
      //...
    })
    app.mixin({
      created() {
        // some logic ...
      }
      //...
    })
  }
}

使用插件

上面我們編寫完插件后,我們就可以去使用插件了。在Vue中使用插件也是非常簡單,我們可以通過使用 use() 方法將插件添加到我們的應(yīng)用中。

use() 方法有兩個(gè)參數(shù)。第一個(gè)是要安裝的插件。

第二個(gè)參數(shù)是可選的,我們可以傳一些自定義參數(shù)給插件。

// main.js
import { createApp } from 'vue'
import Root from './App.vue'
import i18nPlugin from './plugins/i18n'
const app = createApp(Root)
const i18nStrings = {
  greetings: {
    hi: 'Hallo!'
  }
}
app.use(i18nPlugin, i18nStrings)
app.mount('#app')

最后我們在頁面中使用這個(gè)插件:

<template>
  <h1>{{ $translate("greetings.hi") }}</h1>
  <div>i18n插件示例</div>
</template>

最終顯示:

image-20211118233316846

總結(jié)

參考:https://v3.cn.vuejs.org/guide/plugins.html

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • vue中@click和@click.native.prevent的區(qū)別

    vue中@click和@click.native.prevent的區(qū)別

    這篇文章主要介紹了vue中@click和@click.native.prevent的區(qū)別,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue2中如何自定義組件的v-model

    vue2中如何自定義組件的v-model

    這篇文章主要介紹了vue2中如何自定義組件的v-model,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue組件簡易模擬實(shí)現(xiàn)購物車

    Vue組件簡易模擬實(shí)現(xiàn)購物車

    這篇文章主要為大家詳細(xì)介紹了Vue組件簡易模擬實(shí)現(xiàn)購物車,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 如何管理Vue中的緩存頁面

    如何管理Vue中的緩存頁面

    這篇文章主要介紹了如何管理Vue中的緩存頁面,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下
    2021-02-02
  • vue?3.0?使用ref獲取dom元素的示例

    vue?3.0?使用ref獲取dom元素的示例

    這篇文章主要介紹了vue?3.0?使用ref獲取dom元素,包括vue2.x獲取dom和vue3.0獲取單個(gè)dom,通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • element表格行列拖拽的實(shí)現(xiàn)示例

    element表格行列拖拽的實(shí)現(xiàn)示例

    本文主要介紹了element表格行列拖拽的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Vue兩個(gè)通信方式與動畫過度及混入使用介紹

    Vue兩個(gè)通信方式與動畫過度及混入使用介紹

    最近在寫vue的一個(gè)項(xiàng)目要實(shí)現(xiàn)過渡的效果,雖然vue動畫不是強(qiáng)項(xiàng),庫也多,但是基本的坑還是得踩扎實(shí),下面這篇文章主要給大家介紹了關(guān)于Vue中實(shí)現(xiàn)過渡動畫效果的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 可控制緩存銷毀的?keepAlive?組件實(shí)現(xiàn)詳解

    可控制緩存銷毀的?keepAlive?組件實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了可控制緩存銷毀的?keepAlive?組件實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • vue3中使用pinia(大菠蘿)狀態(tài)管理倉庫的項(xiàng)目實(shí)踐

    vue3中使用pinia(大菠蘿)狀態(tài)管理倉庫的項(xiàng)目實(shí)踐

    本文主要介紹了vue3中使用pinia(大菠蘿)狀態(tài)管理倉庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Vue使用vue-cli創(chuàng)建項(xiàng)目

    Vue使用vue-cli創(chuàng)建項(xiàng)目

    這篇文章主要介紹了Vue使用vue-cli創(chuàng)建項(xiàng)目,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論