Vue.use() 的使用和基本原理

31 篇文章 1 订阅
12 篇文章 0 订阅

Vue.use() 在 vue 中使用很多,比如 ElementUI,Router,Vuex 等组件在引用后都会使用 Vue.use 将他们传入作为参数使用,今天记录一下 Vue.use 的用法

先看一下官方给的文档说明

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

Vue.use() 中的参数必须是一个function函数或者是一个Object对象,如果是对象的话,必须在对象中提供一个install方法。之后会将 Vue 作为参数传入。
也就是说:

  1. 参数为函数时,函数的参数是Vue对象
  2. 参数为对象时,它提供的install方法中参数是Vue对象

所以可以进行以下尝试

1.首先是参数为函数时

// 新建一个 demo.js ,尝试参数为函数时 Vue.use() 的情况 ,demo.js文件内容如下
function demo (Vue){
    console.log('fn', Vue)
}

export default demo

// 之后在main.js引入demo.js,并且使用 Vue.use() 调用
import demo from '@/components/demo.js'
Vue.use(demo)

查看控制台输出以下结果

这里是引用

2.接下来是参数为对象时

// 新建一个 demo.js ,尝试参数为对象时 Vue.use() 的情况 ,demo.js文件内容如下
const demo = {
	// 参数为对象时,需要提供install方法
    install: (Vue) => {
        console.log('obj', Vue)
    }
}

export default demo

// 之后在main.js引入demo.js,并且使用 Vue.use() 调用
import demo from '@/components/demo.js'
Vue.use(demo)

查看控制台输出以下结果

这里是引用

除了默认的参数 Vue 以外,还可以按需要传入自定义参数,如(两种方式都可以,这里拿参数为对象形式举例)

const demo = {
    install: (Vue,a,b,c) => {
        console.log('obj', Vue,a,b,c)
    }
}
export default demo

// 在main.js引入demo.js,并且使用 Vue.use() 调用
import demo from '@/components/demo.js'
Vue.use(demo,1,2,{name:'小明'})

控制台结果

这里是引用

所以这就是Vue.use的基础用法了,在Vue.use中可以进行一些自定义操作,如注册组件:

/*****************************************组件代码*******************************************/
<template>
    <div id="haha">
        1231312213 demo 哈哈哈
    </div>
</template>
<script>
export default {
    name: 'haha'
}
</script>
/*********************************Vue.use() 使用的demo.js文件代码******************************/
import haha from '@/components/haha'
const demo = {
    install: (Vue) => {
    	Vue.component('haha', haha)
    }
}
export default demo

/*********************************main.js 调用 Vue.use 的代码*********************************/
// 在引入demo.js,并且使用 Vue.use() 调用
import demo from '@/components/demo.js'
Vue.use(demo)

// 完成之后,就可以在页面中直接使用组件了

除了组件之外,还可以进行注册一些自定义指令或者过滤器之类的操作,功能按需求自己定义,使用方式就先这样了



关于Vue.use() 的使用就到这边,接下来可以进一步了解一下它的源码

import { toArray } from '../util/index'
// Vue.use 源码
export function initUse (Vue: GlobalAPI) {
	// 首先先判断插件plugin是否是对象或者函数:
	Vue.use = function (plugin: Function | Object) {
		const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
		// 判断vue是否已经注册过这个插件,如果已经注册过,跳出方法
		if (installedPlugins.indexOf(plugin) > -1) {
			return this
		}
		
		// 取vue.use参数,toArray() 方法代码在下一个代码块
		const args = toArray(arguments, 1)
		args.unshift(this)
		// 判断插件是否有install方法,如果有就执行install()方法。没有就直接把plugin当Install执行。
		if (typeof plugin.install === 'function') {
			plugin.install.apply(plugin, args)
		} else if (typeof plugin === 'function') {
			plugin.apply(null, args)
		}
		installedPlugins.push(plugin)
		return this
	}
}
// toArray 方法源码
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 Router是Vue.js官方的路由管理器。它和Vue.js的核心深度集成,让构建单页面应用变得易如反掌。Vue Router提供了两种模式:hash模式和history模式。 在hash模式下,路由的路径会被设置成URL的hash部分(即#号后面的部分),而在history模式下,路由的路径会被设置成URL的路径部分(即域名后面的部分)。 Vue Router的实现原理是通过监听URL的变化,然后根据不同的URL路径匹配到对应的组件进行渲染。在hash模式下,Vue Router通过监听window对象的hashchange事件来实现URL的变化检测;在history模式下,Vue Router通过HTML5提供的History API来实现URL的变化检测。 具体来说,在history模式下,Vue Router使用了HTML5提供的History API中的pushState()和replaceState()方法来实现URL的变化。pushState()方法可以向浏览器的历史记录中添加一条新的记录,而replaceState()方法则可以替换当前的历史记录。通过这两个方法,Vue Router可以实现在不进行页面刷新的情况下,改变URL的路径,并且保证浏览器的前进和后退按钮可以正常使用。 下面是一个简单的示例代码,演示了如何使用Vue Router实现基本的路由功能: ```javascript import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter) const routes = [ { path: '/', component: Home }, { path: '/about', component: About } ] const router = new VueRouter({ mode: 'history', routes }) new Vue({ router, render: h => h(App) }).$mount('#app') ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值