最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue.js 插件開發(fā)詳解

 更新時間:2017年03月29日 09:23:09   作者:_林鑫  
本文會通過一個簡單的vue-toast插件,來幫助了解掌握插件的開發(fā)和使用。具有很好的參考價值,下面跟著小編一起來看下吧

前言

隨著 Vue.js 越來越火,Vue.js 的相關(guān)插件也在不斷的被貢獻出來,數(shù)不勝數(shù)。比如官方推薦的 vue-router、vuex 等,都是非常優(yōu)秀的插件。但是我們更多的人還只停留在使用的階段,比較少自己開發(fā)。所以接下來會通過一個簡單的 vue-toast 插件,來了解掌握插件的開發(fā)和使用。

認識插件

想要開發(fā)插件,先要認識一個插件是什么樣子的。

Vue.js 的插件應(yīng)當有一個公開方法 install 。這個方法的第一個參數(shù)是 Vue 構(gòu)造器 , 第二個參數(shù)是一個可選的選項對象:

MyPlugin.install = function (Vue, options) {
 Vue.myGlobalMethod = function () { // 1. 添加全局方法或?qū)傩?,? vue-custom-element
 // 邏輯...
 }
 Vue.directive('my-directive', { // 2. 添加全局資源:指令/過濾器/過渡等,如 vue-touch
 bind (el, binding, vnode, oldVnode) {
 // 邏輯...
 }
 ...
 })
 Vue.mixin({
 created: function () { // 3. 通過全局 mixin方法添加一些組件選項,如: vuex
 // 邏輯...
 }
 ...
 })
 Vue.prototype.$myMethod = function (options) { // 4. 添加實例方法,通過把它們添加到 Vue.prototype 上實現(xiàn)
 // 邏輯...
 }
}

接下來要講到的 vue-toast 插件則是通過添加實例方法實現(xiàn)的。我們先來看個小例子。先新建個js文件來編寫插件:toast.js

// toast.js
var Toast = {};
Toast.install = function (Vue, options) {
 Vue.prototype.$msg = 'Hello World';
}
module.exports = Toast;

在 main.js 中,需要導入 toast.js 并且通過全局方法 Vue.use() 來使用插件:

// main.js
import Vue from 'vue';
import Toast from './toast.js';
Vue.use(Toast);

然后,我們在組件中來獲取該插件定義的 $msg 屬性。

// App.vue
export default {
 mounted(){
 console.log(this.$msg);  // Hello World
 }
}

可以看到,控制臺成功的打印出了 Hello World 。既然 $msg 能獲取到,那么我們就可以來實現(xiàn)我們的 vue-toast 插件了。

開發(fā) vue-toast

需求:在組件中通過調(diào)用 this.$toast('網(wǎng)絡(luò)請求失敗') 來彈出提示,默認在底部顯示。可以通過調(diào)用 this.$toast.top() 或 this.$toast.center() 等方法來實現(xiàn)在不同位置顯示。

整理一下思路,彈出提示的時候,我可以在 body 中添加一個 div 用來顯示提示信息,不同的位置我通過添加不同的類名來定位,那就可以開始寫了。

// toast.js
var Toast = {};
Toast.install = function (Vue, options) {
 Vue.prototype.$toast = (tips) => {
  let toastTpl = Vue.extend({  // 1、創(chuàng)建構(gòu)造器,定義好提示信息的模板
   template: '<div class="vue-toast">' + tips + '</div>'
  });
  let tpl = new toastTpl().$mount().$el; // 2、創(chuàng)建實例,掛載到文檔以后的地方
  document.body.appendChild(tpl);  // 3、把創(chuàng)建的實例添加到body中
  setTimeout(function () {  // 4、延遲2.5秒后移除該提示
   document.body.removeChild(tpl);
  }, 2500)
 }
}
module.exports = Toast;

好像很簡單,我們就實現(xiàn)了 this.$toast() ,接下來顯示不同位置。

// toast.js
['bottom', 'center', 'top'].forEach(type => {
 Vue.prototype.$toast[type] = (tips) => {
  return Vue.prototype.$toast(tips,type)
 }
})

這里把 type 傳給 $toast 在該方法里進行不同位置的處理,上面說了通過添加不同的類名(toast-bottom、toast-top、toast-center)來實現(xiàn),那 $toast 方法需要小小修改一下。

Vue.prototype.$toast = (tips,type) => {  // 添加 type 參數(shù)
 let toastTpl = Vue.extend({    // 模板添加位置類
  template: '<div class="vue-toast toast-'+ type +'">' + tips + '</div>'
 });
 ...
}

好像差不多了。但是如果我想默認在頂部顯示,我每次都要調(diào)用 this.$toast.top() 好像就有點多余了,我能不能 this.$toast() 就直接在我想要的地方呢?還有我不想要 2.5s 后才消失呢?這時候注意到 Toast.install(Vue,options) 里的 options 參數(shù),我們可以在 Vue.use() 通過 options 傳進我們想要的參數(shù)。最后修改插件如下:

var Toast = {};
Toast.install = function (Vue, options) {
 let opt = {
  defaultType:'bottom', // 默認顯示位置
  duration:'2500'   // 持續(xù)時間
 }
 for(let property in options){
  opt[property] = options[property]; // 使用 options 的配置
 }
 Vue.prototype.$toast = (tips,type) => {
  if(type){
   opt.defaultType = type;   // 如果有傳type,位置則設(shè)為該type
  }
  if(document.getElementsByClassName('vue-toast').length){
   // 如果toast還在,則不再執(zhí)行
   return;
  }
  let toastTpl = Vue.extend({
   template: '<div class="vue-toast toast-'+opt.defaultType+'">' + tips + '</div>'
  });
  let tpl = new toastTpl().$mount().$el;
  document.body.appendChild(tpl);
  setTimeout(function () {
   document.body.removeChild(tpl);
  }, opt.duration)
 }
 ['bottom', 'center', 'top'].forEach(type => {
  Vue.prototype.$toast[type] = (tips) => {
   return Vue.prototype.$toast(tips,type)
  }
 })
}
module.exports = Toast;

這樣子一個簡單的 vue 插件就實現(xiàn)了,并且可以通過 npm 打包發(fā)布,下次就可以使用 npm install 來安裝了。

源碼地址:vue-toast

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • Vue input輸入框中的值如何變成黑點問題

    Vue input輸入框中的值如何變成黑點問題

    這篇文章主要介紹了Vue input輸入框中的值如何變成黑點問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 手把手教你用VUE封裝一個文本滾動組件

    手把手教你用VUE封裝一個文本滾動組件

    封裝組件相信對大家來說都不陌生了,下面這篇文章主要給大家介紹了關(guān)于用VUE封裝一個文本滾動組件的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • 深入理解使用Vue實現(xiàn)Context-Menu的思考與總結(jié)

    深入理解使用Vue實現(xiàn)Context-Menu的思考與總結(jié)

    這篇文章主要介紹了使用Vue實現(xiàn)Context-Menu的思考與總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • vue3使用video.js播放m3u8格式視頻的操作指南

    vue3使用video.js播放m3u8格式視頻的操作指南

    有時候我們需要播放 m3u8 格式的視頻,或者實現(xiàn)視頻播放器更多定制化需求,HTML 的 video 元素無法實現(xiàn)這些需求,這時候可以考慮使用 Video.js,本文給大家介紹了vue3使用video.js播放m3u8格式視頻的操作指南,需要的朋友可以參考下
    2024-07-07
  • 一文帶你掌握Vue中keep-alive的使用技巧

    一文帶你掌握Vue中keep-alive的使用技巧

    這篇文章主要來和大家一起深入探討下Vue中keep-alive?的作用及其使用方法,幫助開發(fā)者在實際項目中充分利用這一功能實現(xiàn)高效的組件管理
    2024-11-11
  • Vue注冊組件命名時不能用大寫的原因淺析

    Vue注冊組件命名時不能用大寫的原因淺析

    這段時間一直在弄vue,當然也遇到很多問題,這里就來跟大家分享一些注冊自定義模板組件的心得 ,需要的朋友可以參考下
    2019-04-04
  • 計算屬性和偵聽器詳情

    計算屬性和偵聽器詳情

    這篇文章主要介紹了計算屬性和偵聽器,文章以介紹計算屬性、偵聽器的相關(guān)資料展開詳細內(nèi)容,需要的朋友可以參考一下,希望對你有所幫助
    2021-11-11
  • VUE使用router.push實現(xiàn)頁面跳轉(zhuǎn)和傳參方式

    VUE使用router.push實現(xiàn)頁面跳轉(zhuǎn)和傳參方式

    這篇文章主要介紹了VUE使用router.push實現(xiàn)頁面跳轉(zhuǎn)和傳參方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • vue-pdf插件實現(xiàn)pdf文檔預覽方式(自動分頁預覽)

    vue-pdf插件實現(xiàn)pdf文檔預覽方式(自動分頁預覽)

    這篇文章主要介紹了vue-pdf插件實現(xiàn)pdf文檔預覽方式(自動分頁預覽),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 詳解vue數(shù)據(jù)渲染出現(xiàn)閃爍問題

    詳解vue數(shù)據(jù)渲染出現(xiàn)閃爍問題

    本篇文章主要介紹了vue數(shù)據(jù)渲染出現(xiàn)閃爍問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論

兴仁县| 钟祥市| 滁州市| 北辰区| 南岸区| 府谷县| 连城县| 两当县| 微博| 灵山县| 南江县| 汕头市| 津市市| 汾西县| 东丰县| 大姚县| 台安县| 海盐县| 莆田市| 昭平县| 滨州市| 临江市| 元江| 聂拉木县| 会宁县| 大庆市| 潮州市| 天津市| 邢台县| 荆州市| 英山县| 灵丘县| 清水河县| 长兴县| 临夏市| 乃东县| 渑池县| 苏州市| 逊克县| 珲春市| 盐山县|