10.Vue技术栈开发实战-Vue中第三方JS库的使用


10.Vue技术栈开发实战-Vue中第三方JS库的使用
 

通过封装一个小的组件,如何在Vue中使用第三方的js库。
数字动画的库,把它封装成一个vue的组件。
http://inorganik.github.io/countUp.js/
10.Vue技术栈开发实战-Vue中第三方JS库的使用
创建一个示例页
10.Vue技术栈开发实战-Vue中第三方JS库的使用
路由配置
10.Vue技术栈开发实战-Vue中第三方JS库的使用
给这个组件一个名字
10.Vue技术栈开发实战-Vue中第三方JS库的使用
组件都放components文件夹下
10.Vue技术栈开发实战-Vue中第三方JS库的使用
定义组件的name值,可以在其他组件用的时候,获取组件的名称
10.Vue技术栈开发实战-Vue中第三方JS库的使用
把countTo组件引进来,再导出去。这样在使用这个组件的时候,路径只需要写_c/count-to
10.Vue技术栈开发实战-Vue中第三方JS库的使用
引入这个组件只需要这么写就可以了。引进来之后,要在这个实例下注册这个组件。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
在用的时候,我们建议用这种横线的形式来使用
10.Vue技术栈开发实战-Vue中第三方JS库的使用

开始封装组件

npm install安装这个库
10.Vue技术栈开发实战-Vue中第三方JS库的使用
组件内把它引入
10.Vue技术栈开发实战-Vue中第三方JS库的使用
看看官网的实例,使用CountUp创建一个实例,然后里面可以传入一些参数
参数1:要创建动画的html标签的id值。
最后是一个options对象,里面还有一些参数
10.Vue技术栈开发实战-Vue中第三方JS库的使用
首先需要一个基础的标签,我们用span标签,需要给他一个id值。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
我们使用CountUp创建实例的时候呢,需要把这个id传进去。那么在哪里去创建这个实例 呢?
在mounted这个生命周期钩子里。它会在你的实例创建并且挂载到html标签上之后,触发,当你调用这个生命周期钩子的时候呢,你的dom元素已经都挂载上了。但是还不确定元素已经渲染完成。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
所以我们要确保这个元素渲染完成了,要在this.$nextTick()这个方法里面,传入一个回到函数,当页面的所有Dom都渲染完成后,它会调用nextTikc这个方法里面的回调函数。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
我们在这个里面去创建实例,第一个参数是span的id值,比如这里我们定义为cout_up 
10.Vue技术栈开发实战-Vue中第三方JS库的使用
传入这个id后就会有问题了。你这个组件是要在多个地方多次使用的,页面上每一个元素的id值都要互不相同,不能有一样的id,如果这个地方的id值固定的话,那么多次使用这个组件的时候,就会存在多个相同id的元素。这个时候再去创建这个实例,就会有问题了
所以我们每个组件应该有它自己的id值。使用一个计算属性
10.Vue技术栈开发实战-Vue中第三方JS库的使用
保证这个组件的id值,和其他组件的id值不相同呢?每一个vue实例,都有一个属性叫做_uid,没个组件的_uid都不相同。是保证全局唯一的,我们用它来做为组件id的一部分。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
前面我们再拼上count_up_
10.Vue技术栈开发实战-Vue中第三方JS库的使用
随后把这个eleId绑定到span的id上,这是一个计算属性,我们绑定一个计算属性或者一个数值之类的变量,这个地方要用v-bind的形式来写。 
10.Vue技术栈开发实战-Vue中第三方JS库的使用
:是v-bind:的简写形式
10.Vue技术栈开发实战-Vue中第三方JS库的使用
这样创建CountUp的时候,id就是计算属性了
10.Vue技术栈开发实战-Vue中第三方JS库的使用

10.Vue技术栈开发实战-Vue中第三方JS库的使用
 第二个参数是开始动画的值,我们使用属性传入到这个组件内 。属性设置在props里面。类型是number类型的,默认值是0
10.Vue技术栈开发实战-Vue中第三方JS库的使用
第三个参数,动画停止的时候,要让他变成哪个值。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
这个值是必填的。没有默认值
10.Vue技术栈开发实战-Vue中第三方JS库的使用
小数点 后保留几位小数,默认是0
10.Vue技术栈开发实战-Vue中第三方JS库的使用

10.Vue技术栈开发实战-Vue中第三方JS库的使用
动画要持续多长时间。单位是秒,默认值是2
10.Vue技术栈开发实战-Vue中第三方JS库的使用
10.Vue技术栈开发实战-Vue中第三方JS库的使用
options:配置对象
10.Vue技术栈开发实战-Vue中第三方JS库的使用
10.Vue技术栈开发实战-Vue中第三方JS库的使用

10.Vue技术栈开发实战-Vue中第三方JS库的使用
还有一些其他的方法
10.Vue技术栈开发实战-Vue中第三方JS库的使用
更新值
10.Vue技术栈开发实战-Vue中第三方JS库的使用
调用start方法就开始了。

10.Vue技术栈开发实战-Vue中第三方JS库的使用
更新方法是在实例对象上去更新,所以创建实例的时候的变量我们要存起来。
我们把它定义在对象里,counter是一个对象。默认是一个空对象。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
这样在创建的时候,我们把他存到this.counter里面
10.Vue技术栈开发实战-Vue中第三方JS库的使用
dealy设置动画延迟的效果,单位用的是毫秒。默认是0
10.Vue技术栈开发实战-Vue中第三方JS库的使用
组件对象调用start方法动画就开始了。我们使用settimeOut的形式来设置延迟。
10.Vue技术栈开发实战-Vue中第三方JS库的使用

使用组件

在定义组件的时候endVal是这么定义的。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
但是我们建议在写的时候用横线连接的形式
10.Vue技术栈开发实战-Vue中第三方JS库的使用
定义一个值,比如到100
10.Vue技术栈开发实战-Vue中第三方JS库的使用

gif动图
前面加个内容可以直接这么写
10.Vue技术栈开发实战-Vue中第三方JS库的使用
10.Vue技术栈开发实战-Vue中第三方JS库的使用

给组件加个样式

10.Vue技术栈开发实战-Vue中第三方JS库的使用
默认的类型是count-to-number
10.Vue技术栈开发实战-Vue中第三方JS库的使用
可以再传入一个类名。
10.Vue技术栈开发实战-Vue中第三方JS库的使用

10.Vue技术栈开发实战-Vue中第三方JS库的使用

组件内部加入文字

这个时候就需要用到vue的内置组件 slot
10.Vue技术栈开发实战-Vue中第三方JS库的使用
那么我们组件调用的标签内就可以传入的slot内容
10.Vue技术栈开发实战-Vue中第三方JS库的使用

10.Vue技术栈开发实战-Vue中第三方JS库的使用
如果有多个slot,需要让固定的内容显示在固定的位置。那我们就给slot一个name值,如果不设置name值就是default
10.Vue技术栈开发实战-Vue中第三方JS库的使用
加上slot的name值
10.Vue技术栈开发实战-Vue中第三方JS库的使用
10.Vue技术栈开发实战-Vue中第三方JS库的使用
后面显示的字符
10.Vue技术栈开发实战-Vue中第三方JS库的使用
10.Vue技术栈开发实战-Vue中第三方JS库的使用

获取dom和vue组件实例

有时候组件有些内部方法,可以供外部使用

比如说我们要获取这个组件的span标签显示的数值是多少。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
我们就在这里定义个方法
10.Vue技术栈开发实战-Vue中第三方JS库的使用
肯定是要获取到这个元素,然后取它里面的内容
10.Vue技术栈开发实战-Vue中第三方JS库的使用
可以通过这个id来取,因为我们这个id是唯一的。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
还可以通过ref
10.Vue技术栈开发实战-Vue中第三方JS库的使用
给它定义个名字 例如叫做number
10.Vue技术栈开发实战-Vue中第三方JS库的使用
那么如何使用呢。this.$refs.number就是取到当前这个dom元素。
10.Vue技术栈开发实战-Vue中第三方JS库的使用

10.Vue技术栈开发实战-Vue中第三方JS库的使用
父组件调用子组件的getCount。也是用到了refs。在父组件内调用子组件的地方 定义ref
10.Vue技术栈开发实战-Vue中第三方JS库的使用
如何获取组件的实例呢。定义一个方法,通过this.$refs.countTo获取到这个组件的实例。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
ref用在一个封装的组件上,它获取的就是这个组件的实例,如果用在原生的html标签上呢,它获取的就是dom对象。
获取到实例后,那么我们就可以调用这个实例上的方法getCount()方法
10.Vue技术栈开发实战-Vue中第三方JS库的使用
增加一个按钮,调用这个方法
10.Vue技术栈开发实战-Vue中第三方JS库的使用
打印出了span标签。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
那么如何获取到标签里面的值呢?通过innerText
10.Vue技术栈开发实战-Vue中第三方JS库的使用
10.Vue技术栈开发实战-Vue中第三方JS库的使用
这就是父组件调用子组件内部方法
10.Vue技术栈开发实战-Vue中第三方JS库的使用

更新值方法封封装

如果这个组件动画结束,我们想要更新值
官方封装的方法是update
10.Vue技术栈开发实战-Vue中第三方JS库的使用
结束值发生变化的时候,来调用,
10.Vue技术栈开发实战-Vue中第三方JS库的使用
那么我们就用到了监听值的变化。watch。我们来监听endVal这个值的变化。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
把新的值传进去。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
让传入的值变化,这里要绑定一个变量。endVal默认是100
10.Vue技术栈开发实战-Vue中第三方JS库的使用
加上0到100的随机数
10.Vue技术栈开发实战-Vue中第三方JS库的使用

10.Vue技术栈开发实战-Vue中第三方JS库的使用
点击更新后,变成了253
10.Vue技术栈开发实战-Vue中第三方JS库的使用
它会随即加一个值
10.Vue技术栈开发实战-Vue中第三方JS库的使用

给组件定义事件

当值变化的时候,我们希望有个onChaneg事件,其实你在更新这个值的时候你就知道了值在更新。所以onChange事件就不需要。
但是你可能需要知道这个值更新之后的状态
所以我们可以来添加一个值,动画结束之后的事件,首先值更新有一个时间
是我们定义的属性duration。这是一个以秒为单位的值,
10.Vue技术栈开发实战-Vue中第三方JS库的使用
当你调用update的时候呢,动画开始。经过了duration结束后,我们来触发一个事件on-animation-end事件
10.Vue技术栈开发实战-Vue中第三方JS库的使用
事件传一个值,结束后的值,我们通过getCount()方法来获取这个值。结束之后呢,得到的是一个字符串。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
在外面我们要转换成一个数值类型的
10.Vue技术栈开发实战-Vue中第三方JS库的使用

父组件内接收事件

10.Vue技术栈开发实战-Vue中第三方JS库的使用
它有个参数enVal就是我们在 子组件内通过emit传过来的
10.Vue技术栈开发实战-Vue中第三方JS库的使用
我们来把这个endVal输出一下
10.Vue技术栈开发实战-Vue中第三方JS库的使用
输出的值和实际的值不等
10.Vue技术栈开发实战-Vue中第三方JS库的使用
这是因为存在一个小小的延迟。
我们在子组件内使用 this.nextTick.就是渲染之后。再触发这个事件
10.Vue技术栈开发实战-Vue中第三方JS库的使用

10.Vue技术栈开发实战-Vue中第三方JS库的使用
加上5毫秒的延迟
10.Vue技术栈开发实战-Vue中第三方JS库的使用
10.Vue技术栈开发实战-Vue中第三方JS库的使用

一开始我们也是需要触发这样一个事件的,所以我们把它封装到一个方法里面共用
10.Vue技术栈开发实战-Vue中第三方JS库的使用
这样默认情况下也会触发这个事件
10.Vue技术栈开发实战-Vue中第三方JS库的使用

给组件一个初始的样式

我们就less。单独放到count-to.less文件内。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
vue内引入样式
10.Vue技术栈开发实战-Vue中第三方JS库的使用
这是我们默认的样式
10.Vue技术栈开发实战-Vue中第三方JS库的使用
简单的来定义样式
10.Vue技术栈开发实战-Vue中第三方JS库的使用 
数字颜色就会变成粉色
10.Vue技术栈开发实战-Vue中第三方JS库的使用

第二种方法引入less、直接写在组件内。定义less的标签。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
也可以引入外部的文件。
10.Vue技术栈开发实战-Vue中第三方JS库的使用
 

回顾

如果类型是个Object类型, 可以通过回调函数的形式return 返回空对象{}
10.Vue技术栈开发实战-Vue中第三方JS库的使用
也可以返回一个对象,那么这个对象是通过这个函数返回的
10.Vue技术栈开发实战-Vue中第三方JS库的使用
如果类型是个数组,可以这么返回
10.Vue技术栈开发实战-Vue中第三方JS库的使用

本节代码

10.Vue技术栈开发实战-Vue中第三方JS库的使用

结束





 

 

10.Vue技术栈开发实战-Vue中第三方JS库的使用

上一篇:Ionic启动时提示:The Angular CLI requires a minimum Node.js version of eithor v10.13 or v12.0


下一篇:移动端数据统计和分析最佳实践