自定义message

73 阅读1分钟

自己写一个message组件,这个只是简单的实现了一下

//这是js
import Message from "./Message.vue";
import Vue from "vue";
let MessageConstructor = Vue.extend(Message);
const MessageBox = (props) => {
  const instance = new MessageConstructor({
    data:props
  });
  instance.$mount();
  document.body.appendChild(instance.$el);
  instance?.show(props);
};
export default MessageBox;

//这是vue组件
<template>
  <div :class="['message-wrapper', type]" :style="{ top: top + 'px' }">
    <p class="message-content">{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: '',
      type: 'default',
      top: 0
    }
  },
  beforeMount() {
    const warpper = document.getElementsByClassName('message-wrapper')
    this.top = warpper[warpper.length - 1]?.style?.top ? Number(warpper[warpper.length - 1]?.style?.top.replace('px', '')) + 60 : 0
  },
  methods: {
    show(props) {
      let { message = 'test', duration = 10000 } = props
      this.message = message
      setTimeout(() => {
        document.body.removeChild(this.$el)
      }, duration)
    }
  }
}
</script>

<style lang="scss" scoped>
.message-wrapper {
  position: absolute;
  left: 50%;
  min-width: 200px;
  padding: 12px 16px;
  text-align: center;
  border-radius: 4px;
  background: #FFF;
  box-shadow: 0px 8px 8px -4px rgba(16, 24, 40, 0.04), 0px 20px 24px -4px rgba(16, 24, 40, 0.10);
  cursor: default;

  .message-content {
    color: #101828;
    font-size: 16px;
    font-weight: 600;
  }
}

.default {
  background-color: #edf2fc;
}

.success {
  background-color: #f0f9eb;
}
</style>

具体使用,全局注册一下

import MessageBox from './components/Message.js'
Vue.prototype.$message = MessageBox