亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

手把手帶你封裝一個vue component第三方庫

2019-11-19 12:08:42
字體:
來源:轉載
供稿:網友

為什么選擇自己封裝第三方庫

最近幾個月我司把之前兩三年的所有業務都用了 vue 重構了一遍,前臺使用 vue+ssr,后臺使用了 vue+element,在此過程中封裝和自己寫了很多 vue component。其實vue 寫 component 相當簡單和方便,github上有很多的 vue component 都只是簡單的包裝了一些 jquery 或者原生 js 的插件,但我個人是不太喜歡使用這些第三方封裝的。理由如下:

  1. 很多第三方封裝的組件參數配置項其實是有缺損的。如一些富文本或者圖表組件,配置項遠比你想想中的多得多,第三方封裝組件很難覆蓋全部所有配置。
  2. 第三方組件的更新頻率很難保證。很多第三方封裝組件并不能一直和原始組件保持同步更新速度,萬一原始組件更新了某個你需要的功能,但第三方并沒有更新那豈不是很尷尬,而且很多第三方組件維護一段時間之后就不維護了。
  3. 靈活性和針對性。還是那富文本來說,富文本在我司有很多定制化需求,我們需要將圖片上傳七牛,需要將圖片打水印,需要很多針對業務的特殊需求,使用第三方包裝的組件是不合適的,一般基于第三方封裝的組件是很難拓展的。

所以我覺得大部分組件還是自己封裝來的更為方便和靈活一些。

動手開干

接下來我們一起手摸手教改造包裝一個js插件,只要幾分鐘就可以封裝一個專屬于你的 vue component。封裝對象:countUp.js,改造后結果vue-countTo。

首先我們用官方提供的vue-cli 來構建項目 這里選擇了 webpack-simple (組件相對而言比較簡單,不需要很多復雜的功能,所以 webpack-simple 已經滿足需求了)

$ npm install -g vue-cli$ vue init webpack-simple my-project$ cd my-project$ npm install

安裝countup.js

$ npm install countup.js$ npm run dev

啟動項目之后按照 countup.js 官方 demo 初始化插件

app.vue

<template> <span ref='countup'></span></template><script>import CountUp from 'countup.js'export default { name: 'countup-demo', data () {  return {   numAnim:null  } }, mounted(){  this.initCountUp() }, methods:{  initCountUp(){   this.numAnim = new CountUp(this.$refs.countup,0, 2017)   this.numAnim.start();  } }}</script>

刷新頁面,就這么簡單,countUp.js 已經生效了。

接下來查看 countUp.js 的 github 發現它定義了如下可配置參數

對應 vue 就是 props,類型和初始化一目了然。

props: { start: {  type: Number,  default: 0 }, end: {  type: Number,  default: 2017 }, decimal: {  type: Number,  default: 0 }, duration: {  type: Number,  default: 2.5 }, options: {  type: Object }}

之后再將countup之前寫死的配置項替換為動態props就可以了

this.numAnim = new CountUp(this.$refs.countup,               this.start,              this.end,              this.decimal,              this.duration,              this.options)

使用組件

<vue-count-up :end="2500" :duration="2.5"></vue-count-up>

只要幾分鐘一個屬于自己的原生組件就包裝好了,就是這么簡單。完整demo

這時候你如果覺得使用countUp.js 還有些不滿足你的需求,那你可以選擇自己來造輪子了。

造輪子篇

首先當然是閱讀源碼

其實源碼也就兩部分核心代碼

第一部分:主要是就是 requestAnimationFrame,在游覽器不支持requestAnimationFrame 的情況下使用 setTimeout 來模擬,這段代碼值得仔細閱讀,自己在平時的項目中也能借鑒使用這段代碼。

第二部分:就是 count 函數

看懂這兩部分之后造輪子就相當的簡單了, demo

造輪子過程中發現 countUp,并沒有 autoplay 這個參數項可以讓組件自動開始count,沒關系。。。我們可以自己來擼,我們首先定義 autoplay 這個props為布爾值,默認所有組件 autoplay 為 true

 props:{  autoplay: {   type: Boolean,   required: false,   default: true  } }

定義好 props 之后只要在 mounted 生命周期內加一個判斷就完事了。

mounted() { if (this.autoplay) {  this.start(); }}

我們的 countUp 組件可以自動 count 了!

上傳 npm

在不跨項目的情況下之前所做的已經滿足需求了。但我們不能就此滿足,我想讓世界上更多的人來使用我的插件,這時候就要上傳npmdemo 。

首先我們新建一個index.js

import CountTo from './vue-countTo.vue'// 導出模塊export default CountTo//global 情況下 自動安裝if (typeof window !== 'undefined' && window.Vue) { window.Vue.component('count-to', CountTo)}

同時我們也要改造一下 webpack 的配置,因為不是所有使用你組件的人都是通過 npm 安裝使用 import 引入組件的的。

還有很多人是通過 <script> 標簽的方式直接引入的,所以我們要將 libraryTarget 改為 umd 格式

library: 'CountTo',libraryTarget: 'umd',umdNamedDefine: true

大功告成,現在只要將它發布到 npm 就可以了,首先注冊一個npm 賬號,

之后配置自己的 package.json (注意填寫 version,每次發布的 version 不能相同;main 為入口文件地址)。

之后只要一行命令 npm publish 你的項目就發到 npm 了,快讓小伙伴們一起來用你的vue component 吧!

總結

這里這是拿了一個很簡單的 countUp 組件舉了一個簡單例子,有的時候自己動手豐衣足食,很多插件的封裝比想象中簡單的多。產品經理再也不會看到我因為這個fu**插件怎么不支持這個功能而愁眉苦臉了,我們可以更好地滿足產品了~~
完整項目地址:https://github.com/PanJiaChen/vue-countTo歡迎 star

完整項目地址:vue-element-admin

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区二区三区毛片| 这里精品视频免费| 亚洲xxxx妇黄裸体| 国产一区二区香蕉| 77777少妇光屁股久久一区| 最近中文字幕mv在线一区二区三区四区| 国产成人精品免费久久久久| 国产精品xxxxx| 亚洲成年网站在线观看| 欧美精品电影免费在线观看| 欧美资源在线观看| 高清日韩电视剧大全免费播放在线观看| 全亚洲最色的网站在线观看| 欧美剧在线观看| 国产精品欧美一区二区| 国内揄拍国内精品| 91精品视频免费观看| 成人欧美在线视频| 亚洲午夜久久久久久久| 在线免费看av不卡| 国产福利精品在线| 欧美精品国产精品日韩精品| 国产精品黄色影片导航在线观看| 国产精品海角社区在线观看| 国产97在线视频| 日韩美女视频免费看| 2023亚洲男人天堂| 成人a级免费视频| 青草青草久热精品视频在线网站| 91精品视频免费观看| 在线视频日韩精品| 欧美与欧洲交xxxx免费观看| 欧美孕妇毛茸茸xxxx| 欧美日韩国产精品专区| 亚洲性av在线| 欧美成年人视频网站欧美| 亚洲激情免费观看| 亚洲成人精品久久久| 国产欧美日韩精品在线观看| 国产精品久久久久久中文字| 性视频1819p久久| 国产精品久久av| 欧美裸体视频网站| 久久九九全国免费精品观看| 中文字幕亚洲综合久久筱田步美| 亚洲欧洲在线视频| 成人精品网站在线观看| 孩xxxx性bbbb欧美| 日韩天堂在线视频| 欧美另类在线播放| 日韩电影大全免费观看2023年上| 日韩大片免费观看视频播放| 久久久久国产精品一区| 日韩精品在线观看一区| 91九色视频导航| 亚洲第一网站免费视频| 日韩中文字幕在线观看| 欧美性69xxxx肥| 怡红院精品视频| 日韩电视剧在线观看免费网站| 在线亚洲男人天堂| 亚洲天堂男人天堂女人天堂| 欧美日韩国产精品一区二区三区四区| 亚洲国产成人爱av在线播放| 中文字幕v亚洲ⅴv天堂| 91久久精品美女高潮| 色老头一区二区三区| 国产精品美女久久久免费| 国产精品久久一| 国产精品高潮呻吟久久av无限| 国产日韩欧美电影在线观看| 日韩欧美一区二区在线| 欧美成人黄色小视频| 国语自产精品视频在免费| 久久精品小视频| 亚洲国产99精品国自产| 亚洲www在线观看| 成人h视频在线| 欧美在线国产精品| 一级做a爰片久久毛片美女图片| 日韩在线免费视频| 97在线观看免费高清| 欧美福利视频在线观看| 久久久精品视频在线观看| 亚洲毛片在线免费观看| 欧美刺激性大交免费视频| 亚洲欧美色图片| 亚洲а∨天堂久久精品喷水| 97视频色精品| 亚洲视频第一页| 亚洲аv电影天堂网| 国产日韩av在线| 国产精品一区二区久久久| 最新国产精品亚洲| 亚洲自拍另类欧美丝袜| 韩国精品久久久999| 136fldh精品导航福利| 欧美一级淫片videoshd| 国产成人一区二区三区| 日韩在线观看高清| 日韩大陆欧美高清视频区| 国产一区二区免费| 在线精品播放av| 中文字幕国产精品久久| 亚洲free嫩bbb| 国产一区二区三区在线观看视频| 日本19禁啪啪免费观看www| 日韩av在线一区二区| 高跟丝袜欧美一区| 91精品国产自产在线观看永久| 在线精品高清中文字幕| 欧美孕妇孕交黑巨大网站| 成人激情综合网| 欧美xxxx14xxxxx性爽| 日韩av中文字幕在线播放| 欧美视频免费在线| 91精品视频在线播放| 成人精品视频在线| 国产97在线视频| 中文字幕无线精品亚洲乱码一区| 亚洲伊人成综合成人网| 亚洲精品小视频在线观看| 日韩欧亚中文在线| 国产精品久久久久高潮| 在线免费看av不卡| 精品中文字幕在线观看| 久久综合久中文字幕青草| 综合av色偷偷网| 国产精品免费看久久久香蕉| 北条麻妃一区二区在线观看| 亚洲精品美女久久久久| 在线看片第一页欧美| 海角国产乱辈乱精品视频| 97人人爽人人喊人人模波多| 国产日韩欧美黄色| 久久精品人人爽| 亚洲iv一区二区三区| 欧美性猛交xxxx乱大交蜜桃| 国产成人一区二| 亚洲激情国产精品| 欧美成人免费观看| 亚洲精品日韩av| 最近2019年日本中文免费字幕| 亚洲色图色老头| 亚洲久久久久久久久久| 国产一区二区三区在线观看视频| 成人观看高清在线观看免费| 8x拔播拔播x8国产精品| 亚洲精品免费一区二区三区| 2019av中文字幕| 91中文字幕一区| 欧美性生交xxxxx久久久| 亚洲精品视频免费在线观看| 夜夜嗨av色综合久久久综合网| 伊人伊成久久人综合网小说| 91中文在线视频| 在线精品国产成人综合| 美女精品久久久| 亚洲qvod图片区电影| 亚洲高清色综合| 色777狠狠综合秋免鲁丝| 久久av.com| 92看片淫黄大片欧美看国产片| 国产精品福利在线|