封装vue插件

封装插件

1、Toast组件

<template>
<div class="toast" v-show="isShow">
  {{message}}
</div>
</template>

<script>
export default {
  name: "Toast",
  data(){
    return {
      isShow: false,
      message: '默认消息'
    }
  },
  methods: {
    show(message='默认消息', duration=2000){
      this.isShow = true;
      this.message = message;
      const timeId = setTimeout(()=>{
        this.isShow = false;
        this.message = '';
        clearTimeout(timeId)
      },duration)
    }
  }
}
</script>

<style scoped>
.toast{
  max-width: 80vw;
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  padding: 10px;
 
  color: #fff;
  border-radius: 10px;
}
</style>

 

2、main.js引入

import toast from 'components/common/toast'
Vue.use(toast)

 

3、toast/index.js

import Toast from "./Toast";
const obj = {}

obj.install = function (Vue) {
// 1、创建组件构造器
const toastConstructor = Vue.extend(Toast)

// 2、new的方式,根据组件构造器,创建出来一个组件对象
const toast = new toastConstructor();

// 3、将组件对象,手动挂载到某一个元素上
toast.$mount(document.createElement('div'))
 
// 4、toast.$el对应的就是div
document.body.appendChild(toast.$el)
 
// 将toast组件对象挂载到Vue实例上
Vue.prototype.$toast = toast    
};

export default obj

4、组件中使用

<toast/>   // 使用组件

import Toast from "components/common/toast/Toast";

component: {Toast}

methods: {
addCart(value){
// 调用Toast组件方法
this.$toast.show(value)
}
}

 

 

 

 

 

 

 

 

 

posted @ 2021-03-14 19:06  蠡li  阅读(78)  评论(0编辑  收藏  举报