Vue.use()源码解读

Vue源码系列(一):Vue源码解读的正确姿势 作为一名开发人员,阅读源码是非常好的学习方式,尤其Vue又是当下很受欢迎的前端框架,随着用的人越来越多,不断推动着源码地完善。在源码中有着各位大佬多年积淀下来的精华,而这些精华就非常值得我们学习。 阅读详情

基本使用方法
官方文档传送门
使用Vue.use()方法注册插件的时候,可以传入函数或带有install方法的对象,如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。install 方法调用时,会将 Vue 作为参数传入。

Vue.use()方法需要在调用 new Vue() 之前被调用。

当 install 方法被同一个插件多次调用,插件将只会被安装一次。

Vue.use()方法需要在new Vue()之前调用
原理
源码如下:

/* @flow */

import { toArray } from '../util/index'

export function initUse (Vue: GlobalAPI) {
  Vue.use = function (plugin: Function | Object) {
    const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }

    // additional parameters
    const args = toArray(arguments, 1)
    args.unshift(this)
    if (typeof plugin.install === 'function') {
      plugin.install.apply(plugin, args)
    } else if (typeof plugin === 'function') {
      plugin.apply(null, args)
    }
    installedPlugins.push(plugin)
    return this
  }
}
  • 判断plugin是否是方法或对象

  • 判断是否已注册过这个插件,每个组件保证只能注册一次

  • 取Vue.use()参数

    其中用到的toArray方法如下:

/**
 - Convert an Array-like object to a real Array.
 */
export function toArray (list: any, start?: number): Array<any> {
  start = start || 0
  let i = list.length - start
  const ret: Array<any> = new Array(i)
  while (i--) {
    ret[i] = list[i + start]
  }
  return ret
}

Vue.use()方法传入的参数,除第一个参数外(第一个参数是plugin),其他参数存储在args数组中用于apply方法

  • 判断插件是否有install方法,如果有则执行install方法,否则直接把plugin当做install执行
if (typeof plugin.install === 'function') {
   plugin.install.apply(plugin, args)
} else if (typeof plugin === 'function') {
   plugin.apply(null, args)
}

如果插件有install方法,通过apply方法绑定this到plugin对象
如果插件本身没有install方法,apply方法中的this指向null,执行plugin方法

  • 通过installedPlugins注册plugin插件

扩充知识
1.call和apply的作用和区别

作用:通常用于改变this指向
区别:接收函数的方式不同
call(context,x1,x2,…) 不支持数组形式参数
apply(context,[x1,x2,…]) 支持数组形式参数

2.apply()巧用

求数组最大值:Math.max()入参不支持数组,可以通过Math.max.apply(null,array)的方式实现
合并数组:Array.prototype.push.apply(arr1,arr2)

一般在目标函数只需要n个参数列表,而不接收一个数组的形式([param1[,param2[,…[,paramN]]]]),可以通过apply的方式巧妙地解决这个问题

3.Vue.use()全局扩展组件、第三方插件等

项目中新建plugins.js,添加以下内容

import axios from './axiosPath'
import Vant from 'vant'
import TestComponent from './TestComponent'
export default function(Vue) {
   //注册第三方插件
   Vue.use(Vant)
   //全局挂载
   Vue.prototype.$axios = axios
   //全局注册组件
   Vue.component('TestComponent', TestComponent)
}

main.js中注册plugin

import plugins from './plugins.js'
Vue.use(plugins)

这样配置,修改全局组件或全局挂载参数,进修改plugin.js文件即可,扩展性比较好

Vue 源码解读(5)—— 全局 API Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 目标 深入理解以下全局 API 的实现原理。 Vue.use Vue.mixin Vue.component Vue.filter Vue.directive Vue.extend Vue.set Vue.delete Vue.nextTick 源码解读 从该系列的第一篇文 阅读详情

相关推荐

Vue源码解读(下)-vue2

主要是从原理、实战层面解读了Vue2版本的核心,本节接着分享Vue2源码内容,从底层源码解读Vue2,抽丝剥茧探究Vue2的框架结构,核心的响应式原理实现。

享白 1137

Vue.use 源码

Vue.use() 用来注册插件 /* @flow */ import { toArray } from '../util/index' export function initUse (Vue: GlobalAPI) { // use.js导出 Vue.use = function (plugin: Function | Object) { // 给vue增加 use方法,接收plugin插件作为参数 const installedPlugins = (this._installedPl

qt的博客 375

别再只盯着meta包了!盘点R语言中7个元分析工具包的特色与适用场景

本文深入评测了R语言中7个主流元分析工具包(meta、metafor、netmeta、mada、mvmeta、metasens、rmeta)的核心功能与适用场景,帮助研究者根据具体需求精准选型。通过对比表格和实际代码示例,详细解析了各工具包在传统两两比较、网络Meta分析、诊断准确性研究等不同场景下的差异化优势,并提供了性能对比和组合使用建议。

weixin_30736301的博客 296

vue.use()源码解析

vue.use,apply,arguments

qq_38868959的博客 320

Zephyr RTOS 嵌入式 C 编程 (使用嵌入式 RTOS POSIX API)8. Zephyr RTOS 与以太网、Wi-Fi 及 TCP/IP

支持的 BSD 函数包括:socket()、close()、recv()、recvfrom()、send()、sendto()、connect()、bind()、listen()、accept()、fcntl()(用于设置非阻塞模式)、getsockopt()、setsockopt()、poll()、select()、getaddrinfo()和 getnameinfo()。向开发板烧录代码也可能存在问题。可以通过调用 net_if_up() 开启网络接口 ,调用 net_if_down() 关闭接口。

1342

Orcad 17.2导出PDF原理图终极指南:从Ghostscript安装到带属性书签配置

本文是Orcad 17.2导出高质量PDF原理图的终极指南。针对导出过程中常见的Ghostscript安装报错、软件卡死及版本兼容性问题,提供了详细的解决方案。重点推荐使用Ghostscript 9.53.3版本以确保最佳兼容性,并深入讲解了从安装配置、内存优化到高级书签属性设置的完整流程,帮助硬件工程师稳定、高效地生成带完整器件属性和导航书签的PDF文档。

weixin_29281915的博客 393

Vue.use原理及源码解读

vue.use(plugin, arguments) 语法   》参数:plugin(Function | Object)   》用法:     如果vue安装的组件类型必须为Function或者是Object;     如果是个对象,必须提供install方法;     如果是一个函数,会被直接当作install函数执行;     install函数接受参数,默认第一个参数为Vue,其后参数为...

qq_35859392的博客 323

蓝牙 - 如何在Windows下抓取蓝牙数据

选择Windows Instarller(64-bit),最好不要选择PortableApps版,因为后面需要通过btvs.exe来启动Wireshark,如果是绿色可移植版,会启动失败。在安装完以后,找到btvs.exe文件,位于路径:C:\BTP\v1.14.0\x86下,这个视安装版本不同路径名不同。在第一台机器上启动btvs.exe,第二台机器上手动启动wireshark,并将第一台机器的IP地址作为参数。1,同一机器上,Wireshark安装后,会自动直接启动,如上面使用方式一样。

guoqx的专栏 2万+

vue3源码分析之use(store)

vue3源码分析之use(store) 官方介绍use() 用来安装 Vue.js 插件。如果插件是一个对象,则它必须暴露一个 install 方法。如果插件本身是一个函数,则它将被视为 install 方法。 该 install 方法将以应用实例作为第一个参数被调用。传给 use 的其他 options 参数将作为后续参数传入该安装方法。 当在同一个插件上多次调用此方法时,该插件将仅安装一次。 use()相关源码 use(plugin, ...options) { // 是否已安装此插件

BDawn的专栏 5808

pi/4QPSK调制解调原理

文章目录1. π/4\pi/4π/4QPSK 信号的调制原理2. 匹配滤波器与成形滤波器 1. π/4\pi/4π/4QPSK 信号的调制原理 减小相位突变量的QPSK由偏置键控QPSK(OK-QPSK)和 π/4\pi/4π/4偏置的QPSK( π/4\pi/4π/4QPSK)。由于 π/4\pi/4π/4QPSK是用差分相位编码产生的(因此也叫做 π/4\pi/4π/4DQPSK),能有效地进行差分解调和鉴频器解调,在一些不易提取相干载波的场合很有用。 在常规的QPSK中,输入数据经过串/并变换后,分成

gemengxia的博客 2万+

【数字IC设计】芯片设计中的RDC

在芯片设计中,RDC是的缩写,类似于CDC(clock domain crossing),由于现在SOC芯片是有很多ECUs组成,为了使整个系统能够快速从复位中恢复, 用户希望SOC里面每个ECU模块都可以有自己独立的异步复位信号,这样可以在出问题的时候只复位有错误逻辑的模块,而使其它模块保持正常工作。

qq_40268672的博客 2182

解读Vue.use()源码

Vue.use() vue.use()的作用: 官方文档的解释: 安装 Vue.js 插件。如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。install 方法调用时,会将 Vue 作为参数传入。 vue.use()使用情景: 可以在项目中使用vue.use()全局注入一个插件...

weixin_34007020的博客 278

分析4-20mA检查电路分析

本文介绍了一种工业领域常用的4-20mA电流信号调理电路,可将标准电流信号转换为适合MCU采集的电压信号。电路包含三个关键模块:首先通过10Ω取样电阻将4-20mA电流转换为0.04-0.2V电压;然后采用同向比例运算放大器KTA333-ST5进行信号放大;最后通过二阶有源低通滤波器滤除工业环境中的高频干扰。文章详细分析了各模块的工作原理和参数设计,并以压力传感器和温度变送器为例说明了实际应用中的参数调整方法。该电路具有抗干扰能力强、精度高等特点,适用于工业压力、温度等模拟量信号的采集处理。

qq_37999850的博客 1326

Vue.use()源码解析

  Vue.use() vue.use()的作用: 官方文档的解释: 安装 Vue.js 插件。如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。install 方法调用时,会将 Vue 作为参数传入。 vue.use()使用情景: 可以在项目中使用vue.use()全局注入一个插件,从而不需要在每个组件文件中import...

开发猫 1274

#systemverilog# 之 event region 和 timeslot 仿真调度(三)Verdi 辅助查看

通过今天的学习,我们知道:event region 是event sequence 的全集。我们打开了 event region feature 也就开启了event sequence 的功能。

那么菜的博客 1365

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

vue 判断是否function_从源码解读 Vuex 注入 Vue 生命周期的过程

第一篇文章我会结合 Vue 和 Vuex 的部分源码,来说明 Vuex 注入 Vue 生命周期的过程。说到源码,其实没有想象的那么难。也和我们平时写业务代码差不多,都是方法的调用。但是源码的调用树会复杂很多。 为何使用 Vuex 使用 Vue 我们就不可避免的会遇到组件间共享的数据或状态。应用的业务代码逐渐复杂,props、事件、事件总线等通信的方式的弊端就会愈发明显。这个时候我们就需要...

weixin_28722339的博客 197

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Vue:自定义插件Vue.use()、Vue.component()、Vue.extend()的一点学习

最近看了一下Vue自定义插件的步骤,记录一下: 一、Vue.use() 网上比较多的例子是创建一个loading组件,我们也从这里开始学习 // 第一步:定义loading组件 // 在loading/loading.vue文件中定义一个简单的组件内容 ... // 第二步:定义loading的install方法 // loading/index.js import Loading...

laurel_y的博客 1013

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

vueJs源码解读0-1

vue源码解读-1 在github上下载到源码的后在src的目录下也即是该所有分块的源文件的地址所在的地方,使用webstrom在file–>Settings–>languages&Frameworks中选择javascript使用ECMAScript6 1. index.js import Vue from ‘./instance/vue’ import installGlobal

RankBill 4026

Vue.use() 与 install()

Vue

weixin_45576316的博客 2445

Vue源码解读

本文主要介绍了Vue.js的源代码解读相关的步骤和技巧,包括安装Vue.js源代码、学习Vue.js的架构、阅读Vue.js的源代码、参考Vue.js的文档和社区资源,以及尝试修改Vue.js的源代码等内容。如果你想深入学习Vue.js的实现原理和内部机制,阅读本文可以为你提供一定的参考和帮助。

m0_73442777的博客 2934

Vue.use源码分析

我想有过vue开发经验的,对于vue.use并不陌生。当使用vue-resource或vue-router等全局组件时,必须通过Vue.use方法引入,才起作用。那么vue.use在组件引入之前到底做了那些事情呢?让我们一窥究竟。 先上vue.use源码 Vue.use = function (plugin) { /* istanbul ignore if */ ...

dianwo1613的博客 243

vue 数组push_谈谈Vue.use的原理

前言使用过Vue的童鞋都见过这个Vue.use()的方法,但是有没有想过为什么这个方法需要这个方法来使用插件呢?官方[1]介绍有4中四种为Vue添加全局功能的方法:1.添加全局方法或 propertyVue.myGlobalMethod = function () { // 逻辑... }2. 添加全局资源 Vue.directive('my-directive', { ...

weixin_39847722的博客 445

Vue2.0源码解析 - 知其然知其所以然之Vue.use

前言 小伙伴们大家好。用过Vue的小伙伴都知道,在我们进行Vue开发时,避免不了会使用一些第三方的库,比如说ElementUI组件库。当我们导入好这些组件库后会执行一个Vue.use函数,然后把导进来的组件库作为参数传给该函数。这样就可以在任何页面中都可以随意的使用组件库中的各种组件了。 如果不去执行Vue.use函数,那么即使组件库被导进来,那么内部的组件还是无法使用的。小伙伴们有没有想过这是为什么呐,Vue.use函数的原理又是什么呢,在它的内部都做了什么?接下来我们就为大家来一一解答。 Vue.u

lixiaosenlin的专栏 2313

vue.use()做了什么

initUse的源码: // Vue源码文件路径:src/core/global-api/use.js import { toArray } from '../util/index' export function initUse (Vue: GlobalAPI) { Vue.use = function (plugin: Function | Object) { const in...

weixin_34348111的博客 1661
上一篇: Vue项目多环境访问地址配置
下一篇: vue-router路由实现原理
codezha
博客等级 码龄10年 28粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值