为什么选择自己封装第三方库
最近几个月我司把之前两三年的所有业务都用了 vue 重构了一遍,前台使用 vue+ssr,后台使用了 vue+element,在此过程中封装和自己写了很多 vue component。其实vue 写 component 相当简单和方便,github上有很多的 vue component 都只是简单的包装了一些 jquery 或者原生 js 的插件,但我个人是不太喜欢使用这些第三方封装的。理由如下:
所以我觉得大部分组件还是自己封装来的更为方便和灵活一些。
动手开干
接下来我们一起手摸手教改造包装一个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
在不跨项目的情况下之前所做的已经满足需求了。但我们不能就此满足,我想让世界上更多的人来使用我的插件,这时候就要上传npm了 demo 。
首先我们新建一个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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
一、第三方手册 第三方手册主要是PHPCMS v9中使用的第三方开源项目的相关使用手册与API文档,方便大家在其基础上扩展与二次开发 二、目录 JQuery 手册 artDialog手册 formValidator手册 calendar手册 CKEDITOR
本文向大家介绍Vue手把手教你撸一个 beforeEnter 钩子函数,包括了Vue手把手教你撸一个 beforeEnter 钩子函数的使用技巧和注意事项,需要的朋友参考一下 为什么要自造beforeEnter钩子函数? 看下问题场景:项目中有一单词列表页面,每个cell都会备注该单词是否已经掌握,点击cell进入详情页,可对该单词进行学习,并标记单词是否掌握,并且在详情页面中也可以通过点击前进
本文向大家介绍ASP.NET MVC3手把手教你构建Web,包括了ASP.NET MVC3手把手教你构建Web的使用技巧和注意事项,需要的朋友参考一下 开发工具:VS2010+MSSQL2005,需要使用MVC3.0 环境配置 第一步:到官方网站下载MVC3,提供了简体中文。先安装 AspNetMVC3ToolsUpdateSetup.exe,然后安装AspNetMVC3ToolsUpdateVS
本文向大家介绍手把手教你如何安装Pycharm(详细图文教程),包括了手把手教你如何安装Pycharm(详细图文教程)的使用技巧和注意事项,需要的朋友参考一下 本文介绍了手把手教你如何安装Pycharm,分享给大家,具体如下: 1、首先去Pycharm官网,或者直接输入网址:http://www.jetbrains.com/pycharm/download/#section=windows,下载P
本文向大家介绍手把手教你pycharm专业版安装破解教程(linux版),包括了手把手教你pycharm专业版安装破解教程(linux版)的使用技巧和注意事项,需要的朋友参考一下 1.首先到jetbrains下载专业版 https://www.jetbrains.com/pycharm/download/#section=linux 我这里下载的是pycharm-professional-2018
很多朋友听过ChatGPT,但是不知道去哪里体验它,现在小牛手把手教你使用 ChatGPT。