VUE手动实现一个编程式组件

2020-04-17  本文已影响0人  帅的潇洒

1.创建一个组件(用于编程式调用的)

<template>
  <div class='toast'
       v-show='isShow'>
    {{message}}
  </div>
</template>
<script>
export default {
  data () {
    return {
      message: '',
      isShow: false
    }
  },
  methods: {
    show (message, duration) {
      this.message = message
      this.isShow = true
      setTimeout(() => {
        this.isShow = false
        this.message = ''
      }, duration)
    }
  }
}
</script>
<style scoped>
.toast {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 999;
  padding: 8px 10px;
  background-color: rgba(0, 0, 0, 0.3);
}
</style>

2.实现编程式

import Toast from './toast'
const obj = {}
obj.install = function (Vue) {
  // 创建构造器
  const ToastContrystor = Vue.extend(Toast)
  // new的方式 根据组件构造器,可以创建组件对象
  const toast = new ToastContrystor()
  // 手动挂载某一个元素上
  toast.$mount(document.createElement('div'))
  // toast.$el对应的就是div
  document.body.appendChild(toast.$el)
    //组件挂载到Vue原型上
  Vue.prototype.$toast = toast
}
export default obj

3.在main.js注册

import Vue from 'vue'
import toast from '@/components/common/toast/index.js'
Vue.use(toast)

4.使用

this.$toast.show('这不是一个错误',1000)
上一篇下一篇

猜你喜欢

热点阅读