Vue.use及vue 全局、局部注册插件

全局引入方法一

src/utils/vue-use目录下, 下面新建 plugins.js

// plugins.js
const fun = () => {
    return "方法一";
}
function getRandColor() {
    let tem = Math.round(Math.random() * colorListLength)
    return colorList[tem]
}
const colorList = [
    '#F9F900',
    '#6FB7B7'
]
const colorListLength = 20
const obj = {
    name: 'crj',
    age: 18
}
export default {
    fun,
    getRandColor,
    colorList,
    colorListLength,
    obj
}

全局引入,在入口文件main.js引入

import globalFun from "@/utils/vue-use/plugins"
Vue.prototype.$globalFun = globalFun

// 然后就可以全局使用plugins.js里面的方法了,
this.$globalFun.fun(); 
this.$globalFun.getRandColor()
this.$globalFun.colorList
this.$globalFun.colorListLength
this.$globalFun.obj

组件中引入

<script>
import globalFun from '@/utils/vue-use/plugins'
export default {
  data () {
    return {
      getColor: globalFun.getRandColor
    }
  },
  mounted() {
      globalFun.fun()
      globalFun.getRandColor()
      globalFun.colorList
      globalFun.colorListLength
      globalFun.obj
  },
}
</script>

全局引入方法二

src/utils/vue-use目录下, 下面新建 commen.js

export default {
    install(Vue, options) {  
        Vue.prototype.fun3 = function() {
            console.log(options); // 结果:参数
            return '方法三'
        }
    }
}
// 在入口文件main.js引入
import globalFun3 from "@/utils/vue-use/commen"
Vue.use(globalFun3, '参数');

// 然后就可以全局使用commen.js里面的方法了
this.fun3()

全局引入方法三

src/utils/vue-use目录下, 下面新建 base.js

exports.install = function(Vue, options) {
    Vue.prototype.text1 = function() { //全局函数1
        alert('执行成功1');
    };
    Vue.prototype.text2 = function() { //全局函数2
        alert('执行成功2');
    };
};
// 在入口文件main.js引入
import base from '@/utils/vue-use/base' //引用
Vue.use(base); //将全局函数当做插件来进行注册
// 然后就可以全局使用base.js里面的方法了
this.text1()
this.text2()

Vue.use 介绍

src/utils/vue-use目录下, 下面新建 plugins.js,index.js

// 文件:  src/utils/vue-use/plugins.js
const Plugin1 = {
    install(a, b, c) {
        console.log('Plugin1 第一个参数:', a);
        console.log('Plugin1 第二个参数:', b);
        console.log('Plugin1 第三个参数:', c);
    },
};
function Plugin2(a, b, c) {
    console.log('Plugin2 第一个参数:', a);
    console.log('Plugin2 第二个参数:', b);
    console.log('Plugin2 第三个参数:', c);
}
export { Plugin1, Plugin2 };
// 文件: src/utils/vue-use/index.js
import Vue from 'vue';
import { Plugin1, Plugin2 } from './plugins';
Vue.use(Plugin1, '参数1', '参数2');
Vue.use(Plugin2, '参数A', '参数B');
// 然后我们在入口文件main.js引用这段代码
import Vue from 'vue';
import '@/classes/vue-use';
import App from './App';
Vue.config.productionTip = false;
new Vue({
    el: '#app',
    render: h => h(App),
});

全局模板

src/components/loading目录下, 下面创建loading.vueindex.js文件

// loading.vue
<template>
  <div class="loading-box"> 
    Laoding...
  </div>
</template>
// index.js
// 引入组件
import LoadingComponent from './loading.vue'
// 定义 Loading 对象
const Loading = {
    // install 是默认的方法。当外界在 use 这个组件的时候,就会调用本身的 install 方法,同时传一个 Vue 这个类的参数。
    install: function (Vue) {
        Vue.component('Loading', LoadingComponent)
    }
}
// 导出
export default Loading

全局引入,在入口文件main.js引入

import Loading from '@/components/loading/index'
Vue.use(Loading)

Vue.use 与 Vue.prototype 是vue注册插件的两种方式

相同处:实现的原理都是在Vue.prototype上添加了一个方法
不同处:Vue.prototype适合于注册vue生态外的插件 Vue.use适合于注册vue生态内的插件

vue.prototype.$xxx: 
	是在vue的原型链上挂在一个变量、
	添加符号 $ 是防止被组件中的变量意外覆盖、
	利用函数原型上的属性 / 方法在函数实例化后可以通过this.$xxx在任意实例上读取
Vue.use() 需要传入参数 Object 或 Function (前端通常是Object)
	如果是 Object 那么这个 Object 需要定义一个 install 方法
	如果是 Function 那么这个函数就被当做 install 方法
	Vue.use() 需要在 new Vue() 之前完成
	同一个插件多次使用Vue.use()也只会被运行一次
	Vue.use主要是执行install方法,而install主要也是执行Vue.prototype方法。
	所以,其实Vue.use()方法的核心就是Vue.prototype,只不过又封装了一层,更加的灵活,扩展性更好

理解:把vue理解成一棵树,Vue.use和Vue.prototype都是在这颗树上挂载插件的方式,不同之处是使用vue.prototype,插件不需要实现install方法,简单粗暴,拿来就用,但是灵活性不如Vue.use(), 而Vue.use(),却要求插件必须实现instal方法或者该插件本身就是函数,在install方法可以完成自己的逻辑, 所以Vue.use()的方式更加的强大,灵活,扩展性更好。
但是两者并没有高低之分, 只是有着各自的应用场景,Vue.prototype适合于非Vue生态的插件,而Vue.use()适合于Vue生态内的插件,两者互相配合,一个简单实用,一个灵活扩展性好。
而且,Vue.use的实现依赖于Vue.prototype,
最本质的理解就是Vue.use包裹着Vue.prototype进一步的封装了一次。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: `Vue.use` 和 `Vue.component` 都是 Vue.js 框架中用来注册全局组件的方法,但它们的使用方式和作用略有不同。 `Vue.use` 方法用来安装 Vue.js 插件,这些插件可以是 Vue.js 的内置插件或第三方插件。这个方法会在全局 Vue 实例上安装一个插件,并且可以传递一些参数给这个插件。例如,我们可以使用 `Vue.use` 来安装 Vuex 或 Vue Router 等插件。 示例: ``` import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); const store = new Vuex.Store({ // state, mutations, actions, getters... }); new Vue({ el: '#app', store, render: h => h(App) }); ``` `Vue.component` 方法用来注册全局组件,这些组件可以在应用的任何地方使用。注册组件后,就可以在组件模板中使用这个组件了。 示例: ``` import Vue from 'vue'; import MyComponent from './MyComponent.vue'; Vue.component('my-component', MyComponent); new Vue({ el: '#app', render: h => h(App) }); ``` 在上面的示例中,我们使用 `Vue.component` 方法来注册一个名为 `my-component` 的全局组件,并指定组件的实现是 `MyComponent.vue` 文件中导出的组件。现在,在应用的任何地方都可以使用 `<my-component>` 标签来使用这个组件。 ### 回答2: vue.usevue.component是Vue.js中两个不同的API。 vue.use是用来安装Vue.js插件的方法。它会调用传入插件对象的install方法,并且可以在全局范围内使用插件的方法、指令或组件。使用vue.use可以全局注册一个插件,例如使用第三方插件vue-router、vuex等。 vue.component是用来注册组件的方法。它可以注册一个全局组件或局部组件。全局组件意味着可以在整个应用中使用这个组件,而局部组件只能在该组件的父组件内部使用。通过vue.component可以传入组件的名称和选项,例如template、data、methods等,来定义一个组件。注册完组件后,可以在template中使用这个组件。 总结来说,vue.use是用来安装插件的方法,而vue.component是用来注册组件的方法。使用vue.use可以全局注册插件,使用vue.component可以全局注册组件或局部注册组件。 ### 回答3: vue.use是用来安装Vue插件的方法,它接收一个插件作为参数,然后将该插件安装到Vue中。通过调用插件的install方法,可以在插件内部进行一些初始化操作,例如注册全局组件、添加自定义指令、扩展Vue的原型等。使用vue.use方法安装插件后,该插件的功能就可以在整个应用中使用了。 而vue.component是用来注册全局组件的方法,它接收两个参数,组件的名称和组件的选项对象。该方法会将组件注册Vue全局组件列表中,使得在任何组件中都可以使用该组件。注册组件后,我们可以在模板中通过标签的方式来使用该组件,并在组件选项对象中定义组件的属性、方法、生命周期钩子等。 综上所述,vue.use方法是用来安装插件的,而vue.component方法用来注册全局组件。使用vue.use方法安装插件时,可以实现一些全局的功能扩展;而使用vue.component方法注册全局组件时,可以在各个组件中使用该组件。两者的区别在于使用的场景和功能,vue.use用于插件的安装,vue.component用于组件的注册

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端全栈分享站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值