一:Vue.use()的作用

1. 扩展Vue的功能 : 比如添加全局过滤器,添加全局组件

2. 示例: Vue.use(vuex),Vue.use(vueRouter),Vue.use(Vant) … 从拓展vue的功能意义来说vuex,vueRouter,Vant 做可以叫做vue的插件

二: 封装过程

1. 创建文件 src/utils/formateDate.js

这个文件是把日期格式化的函数单独封装成一个模块,以供在不同项目中使用

  1. export const relativeTime = val => {
  2. const t = new Date(val)
  3. const diff = Date.now() - t.getTime()
  4. const year = Math.floor(diff / (1000 * 3600 * 24 * 365))
  5. if (year) {
  6. return `${year}年前`
  7. }
  8. const month = Math.floor(diff / (1000 * 3600 * 24 * 30))
  9. if (month) {
  10. return `${month}月前`
  11. }
  12. const day = Math.floor(diff / (1000 * 3600 * 24))
  13. if (day) {
  14. return `${day}天前`
  15. }
  16. const hour = Math.floor(diff / (1000 * 3600))
  17. if (hour) {
  18. return `${hour}小时前`
  19. }
  20. const minute = Math.floor(diff / (1000 * 60))
  21. if (minute) {
  22. return `${minute}分钟前`
  23. } else {
  24. return '刚才'
  25. }
  26. }
  27. export default {
  28. install: function (Vue) {
  29. // console.log('install', val === Vue)
  30. // 补充定义全局过滤器
  31. // Vue.filter('relativeTime', (val)=>{})
  32. Vue.filter('relativeTime', relativeTime)
  33. }
  34. }

2. 在main.js里面导入

  1. // 省略其他...
  2. import obj from '导入formateDate.js文件'
  3. Vue.use(obj)

3. 运行原理

a) 相当于install这个对象呗默认导出了,然后在main.js里面obj又将它导入,紧接着就是

Vue.use(obj) .

b) 那么Vue.use(obj)又是怎么工作的呢?

Vue.use()会找到install方法,同时把Vue传进来给函数的形参,然后在函数里面

(‘relativeTime’, relativeTime),传入了一个全局的时间过滤器,这个时候Vue就被我们拓展

了一个全局过滤器的功能出来,这样直接就可以Vue.use() 了

图示说明:

image.png