zoukankan      html  css  js  c++  java
  • Vue2源码解读(5)

    vue.use 使用及实现原理

    Vue.use( plugin )

    • 参数:
      • plugin: { object | Function}

    做什么的?

    • vue全局注册插件的方法

    用法

    如果插件是一个对象,必须提供 install 方法。如果插件是一个函数,它会被作为 install 方法。install方法调用时,会将 Vue 作为参数传入

    1. 该方法需要在调用 new Vue() 之前被调用。
    2. install 方法被同一个插件多次调用,插件将只会被安装一次

    注意以上俩点,我们看源码是怎么实现的!

    实现原理 - 源码

    源码位置: src/core/global-api/use.js

    import { toArray } from '../util/index'
    
    // 将 `Vue` 作为参数传入
    export function initUse (Vue: GlobalAPI) {
        // 插件传入类型为 Function 或 Object
      Vue.use = function (plugin: Function | Object) {
        // 先声明一个installedPlugins数组, 用来存放安装过的插件
        const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
          // 当新的插件注册后,首先判断缓存的数组中有没有
        if (installedPlugins.indexOf(plugin) > -1) {
          // 如果有 直接返回 vue实例, 防止重复安装。 也就是上面用法中的第2点
          return this
        }
    
        // 附加参数处理
        // 将其他参数都通过toArray方法转化成数组
        const args = toArray(arguments, 1)
        // 然后将vue实例放到数组的第一个位置,后续调用install方法都必须传入vue作为参数
        args.unshift(this)
        // 如果传入的plugin的install方法是一个函数
        if (typeof plugin.install === 'function') {
            // 那就把参数传入并执行
          plugin.install.apply(plugin, args)
           // 如果传入的 plugin 是方法那就直接执行
        } else if (typeof plugin === 'function') {
          plugin.apply(null, args)
        }
        // 把插件存在数组中
        installedPlugins.push(plugin)
        // 返回 vue 实例
        return this
      }
    }
    
    // toArray方法  src/shared/util.js 这个里面有好多工具函数,可以参考使用
    // 将类数组对象转换为真正的数组.
    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
    }
    
  • 相关阅读:
    18-10-11 关于触发器的学习
    18-10-29 关于设计器机器人等安装遇到的问题的解决方法
    18-10-25 全局函数测试总结 创建时间的目录 网页获取数据 写入数据
    18-09-08 关于Linux 的安装遇到的一些小坑
    18-08-27 机器人自动化之页面表格数据的定位拾取
    day 96 关于分页的使用
    day73 母版 中间件
    通过 U 盘启动重装 macOS 系统
    MAMP 环境下为 php 添加 pcntl 扩展
    使用 Composer 安装 Laravel 框架
  • 原文地址:https://www.cnblogs.com/shizk/p/15465190.html
Copyright © 2011-2022 走看看