手写 vue.use Vue.compile Vue.mixin

 一、Vue.use

 

Vue.use(plugin);

 

(1)参数

 

{ Object | Function } plugin

(2)用法

 

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

 

关于如何上开发Vue插件,请看这篇文章,非常简单,不用两分钟就看完:如何开发 Vue 插件?

 

(3)作用

 

注册插件,此时只需要调用install方法并将Vue作为参数传入即可。但在细节上有两部分逻辑要处理:

 

1、插件的类型,可以是install方法,也可以是一个包含install方法的对象。

 

2、插件只能被安装一次,保证插件列表中不能有重复的插件。

 

(4)实现

 

Vue.use = function(plugin){

 const installedPlugins = (this._installedPlugins || (this._installedPlugins = []));

 if(installedPlugins.indexOf(plugin)>-1){

  return this;

 }

 <!-- 其他参数 -->

 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,plugin,args);

 }

 installedPlugins.push(plugin);

 return this;

}

1、在Vue.js上新增了use方法,并接收一个参数plugin。

 

2、首先判断插件是不是已经别注册过,如果被注册过,则直接终止方法执行,此时只需要使用indexOf方法即可。

 

3、toArray方法我们在学习vue源码(1) 手写与事件相关的实例方法已经提到过,就是将类数组转成真正的数组。使用toArray方法得到arguments。除了第一个参数之外,剩余的所有参数将得到的列表赋值给args,然后将Vue添加到args列表的最前面。这样做的目的是保证install方法被执行时第一个参数是Vue,其余参数是注册插件时传入的参数。

 

4、由于plugin参数支持对象和函数类型,所以通过判断plugin.install和plugin哪个是函数,即可知用户使用哪种方式祖册的插件,然后执行用户编写的插件并将args作为参数传入。

 

5、最后,将插件添加到installedPlugins中,保证相同的插件不会反复被注册。

 

二、Vue.mixin

 

Vue.mixin(mixin);

(1)参数

 

{ Object } mixin

(2)用法

 

1、全局注册一个混入(mixin),影响之后创建的每个Vue.js实例。

 

2、插件作者可以使用混入向组件注入自定义行为(例如:监听生命周期钩子)。不推荐在应用代码中使用。

 

Vue.mixin({

 created:function({

  var myOption = this.$options.myOption;

  if(myOption){

   console.log(myOption);

  }

 })

})

 

new Vue({

 myOption:'hello!'

})

// => "hello!"

(3)Vue.mixin方法注册后,会影响之后创建的每个Vue.js实例,因为该方法会更改Vue.options属性。

 

(4)实现

 

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

 

export function initMixin(Vue){

 Vue.mixin = function(minxin){

  this.options = mergeOptions(this.options,mixin);

  return this;

 }

}

1、mergeOptions会将用户传入的mixin与this.options合并成一个新对象,然后将这个生成的新对象覆盖this.options属性,这里的this.options其实就是Vue.options。mergeOptions的具体实现,我们后面再讲。

 

2、因为mixin方法修改了Vue.options属性,而之后创建的每个实例都会用到该属性,所以会影响创建的每个实例。

 

三、Vue.compile

 

Vue.compile(tempalte);

(1)参数

 

{ string } template

(2)用法

 

编译模板字符串并返回包含渲染函数的对象。只在完整版中才有效。

 

var res = Vue.compile('<div><span>{{msg}}</span></div>');

new Vue({

 data:{

  msg:'hello'

 },

 render:res.render

})

(3)并不是所有Vue.js的构建版本都存在Vue.compile方法。与vm.$mount类似,Vue.compile方法只存在于完整版中。(只有完整版包含编译器)

 

(4)实现

 

Vue.compile方法只需要调用编译器就可以实现功能。

 

Vue.compile = compileToFunctions;

compileToFunctions方法可以将模板编译成渲染函数。

 

compileToFunctions函数,我们在学习vue源码(4) 手写vm.$mount方法 已经讲到了,这里将不再赘述。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: vue.component和vue.use都是Vue.js中的方法,但是它们的作用不同。 vue.component用于注册全局组件,可以在任何Vue实例中使用。例如: ``` Vue.component('my-component', { // 组件选项 }) ``` 而vue.use用于安装Vue.js插件,可以在Vue实例中使用插件提供的功能。例如: ``` Vue.use(myPlugin) ``` 其中myPlugin是一个Vue.js插件,它需要提供一个install方法。在install方法中,可以注册全局组件、指令、混入等。例如: ``` const myPlugin = { install(Vue, options) { // 注册全局组件 Vue.component('my-component', { // 组件选项 }) // 注册全局指令 Vue.directive('my-directive', { // 指令选项 }) // 注册全局混入 Vue.mixin({ // 混入选项 }) } } ``` 总之,vue.component用于注册全局组件,vue.use用于安装Vue.js插件。 ### 回答2: 在Vue.js框架中,Vue.component和Vue.use都是用于组件注册的方法。但它们之间有一些区别。 Vue.component是Vue.js用于定义全局或局部组件的方法,可以在全局或局部范围内注册一个组件,使之在应用中可以被多个组件使用。它接收两个参数:第一个参数是组件的名字,第二个参数是一个选项对象,如下: ``` Vue.component('my-component', { // 组件选项 }) ``` Vue.useVue.js插件的方法,用于在全局范围内注册Vue插件Vue插件通常是通过一个对象或一个函数暴露出来,该对象或函数要具有一个install方法。使用Vue.use可以安装插件并将该插件自动注册到Vue实例的所有组件中。使用Vue.use时,必须将插件作为参数传递给Vue.use方法,如下: ``` // 引入插件 import MyPlugin from 'path/to/MyPlugin.js' // 安装插件 Vue.use(MyPlugin) ``` 总之,Vue.component和Vue.use都是用于组件注册的方法,但Vue.component用于组件的定义和注册,Vue.use则用于全局插件的注册和安装,二者的用途和效果不同。 ### 回答3: Vue.js是一款非常流行的JavaScript框架,它提供了很多有用的特性和工具来方便我们开发Web应用程序。Vue.js中常用的两个API是vue.component和vue.use。它们都是以插件的形式来扩展Vue.js的功能。虽然它们有一些相似之处,但是也有一些不同之处。本文将从多个方面对它们进行比较,以便更好地理解它们的作用和用法。 1、作用 vue.component的作用是注册一个全局或局部组件。这个组件可以被其他组件或者模板文件引用。我们可以为组件设置属性(prop)和事件(event),并可以在组件中使用响应式的数据。这样可以实现组件的代码重用和灵活性。 vue.use的作用是注册一个Vue.js插件插件一个包含了一些预置功能的JavaScript对象,可以扩展Vue.js的全局或局部功能。插件一般包含了一些全局的属性、指令、组件以及一些工具方法。使用插件可以方便地扩展Vue.js的功能,而且插件还可以被其他开发者共享和复用。 2、用法 vue.component的用法: 全局注册 Vue.component('component-name', { // options }) 局部注册 new Vue({ // ... components: { 'component-name': { // options } } }) vue.use的用法: Vue.use(plugin) 3、调用方式 vue.component 全局组件可以直接在任何地方使用,局部组件只能在注册组件的实例或其子组件中使用vue.use 插件可以在Vue根实例之前调用,也可以在Vue根实例之后调用。在调用use方法之后,插件会被安装并立即生效。插件通常是全局可用的,可以在Vue的组件中使用。 4、局限性 vue.component 局部注册的组件不可以在父级组件中使用,只能在父级组件的模板中使用。此外,全局组件也有可能会被其他库或者开发者使用同样的名称而冲突。 vue.use 由于插件本质上是一个JavaScript对象,因此插件可以被修改或覆盖。此外,插件还必须暴露一个install方法,否则使用use安装插件时会报错。 总结: vue.component是Vue.js的组件注册方法,用于注册全局或局部的组件,以实现组件的代码复用和灵活性。 vue.useVue.js插件注册方法,用于注册插件以扩展Vue.js的全局或局部功能,以方便开发者开发和复用Vue.js的扩展功能。 两个API虽然有很多相似之处,但是在实际使用中也存在很多不同之处。了解这些差异和各自的用法可以帮助我们更好地使用Vue.js,提高开发效率和质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值