vue注册全局插件的两种方式

一、模仿element-ui中this.$message()方式创建全局插件

vue2.x环境下:写好的任意组件VantAlert.vue,需要注册全局组件:

1、首先创建vantAlert.js文件开发插件:

此文件暴露出一个拥有install方法的对象,install方法的第一个参数是Vue构造器,第二个参数option是可选的对象参数。使用vue.use()可以直接调用install方法。


import VantAlert from './VantAlert.vue'

export default {

install: (Vue) => {

// 利用Vue.extend创建构造器

    const CommentAlert = Vue.extend(VantAlert)

// 实例化组件

    const instance = new CommentAlert()

// 为vue原型添加$commentAlert方法

    Vue.prototype.$commentAlert = (options = {}) => {

    // 挂载组件

      instance.$mount()

    // 将组件元素添加到body中

      document.body.appendChild(instance.$el)

    // 改变实例中data的值

      instance.show =true

    }

}

}

2、在main.js文件中导出的方法放到vue的原型链上


// main.js中引入函数文件

import vantAlert from "./components/commentAlert/component/vantAlert";

//使用插件,Vue.use应该在new Vue()之前调用,并且Vue.use会阻止多次注册相同组件,即使多次调用也只会注册一次该组件。

Vue.use(vantAlert)

3、使用


this.$vantAlert({content:‘传递的参数’})

4、注册的组件内正常编写代码:传递过来的参数data接收


export default {

  name:"VantAlert",

  data() {

    return {

        show:true,

        content:'默认的内容',  //能够接收传递过来的参数

        showTitle:false

     }

  }

}

vue3.0环境下:只是写法上稍微有些不同:

1、vantAlert.js文件更改如下


import {createApp } from 'vue'

import VantAlert './VantAlert.vue'

const vantAlert=function(options = {}) {

  //注册组件,并接收传递的参数

  let messageConstructor =createApp(VantAlert, { ...options })

  //将组件挂载到body下,instance.$el是需要挂载的组件

  messageConstructor.mount('body')

}

export default vantAlert

2、main.js中将组件方法绑定到原型链上:


import {createApp } from 'vue'

import App from './App.vue'

import vantAlertfrom './components/vantAlert'

const app =createApp(App)

app.config.globalProperties.$vantAlert=vantAlert

3、使用传参数跟vue2.x一样

4、组件内接收参数通过props接收参数


export default {

    name:"index",

    props: {

      content: {

         type:String,

         default:'暂无文案'

       }

  }

}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容