vue 2.x 函数式调用组件

本文介绍了Vue2.x中如何实现类似ElementUI的函数式组件,以`$message`为例。通过创建一个Message构造函数并挂载到Vue实例上,可以在任何组件中调用`this.$msg`来显示消息弹窗。组件的样式和逻辑可以根据需求进行定制,并通过setTimeout自动销毁。这种实现方式为开发者提供了便捷的全局提示组件。
摘要由CSDN通过智能技术生成

函数式组件
相信每个朋友都用过vue的UI框架,如ElementUI,iview等
在使用时有些会用到通过一个函数来调用组件
比如Element中的this.$message()来调用一个弹出框消息的组件
这里就来跟大家说说在vue2.x是怎么实现的,vue3抽空写
文件结构:

message
·····main.vue
·····index.js
·····index.sacc

1.message.vue

<template>
  <div class="g">
    <div :class="{
      'msg-wb': 1,
      'msg-up': position=== 'up',
      'msg-down': position=== 'down',
      'msg-left': position=== 'left',
      'msg-right': position=== 'right',
      'msg-success': type === 'success',
      'msg-warning': type === 'warning',
      'msg-danger': type === 'danger',
      'msg-primary': type === 'primary',
      'msg-error': type === 'error'
    }" >{{ message }}</div>
  </div>
</template>

<script>
export default {
	data() {
      return {
        message: '消息为空',
        position: 'up',
        type: 'primary'
      }
    }
}
</script>

<style scoped>
//这里根据不同的class 自己写样式,博主也懒得写
</style>

2.index.js

import Main from "./main.vue";
import Vue from "vue";

const MessageConstructor = Vue.extend(Main);
// 这里面要处理逻辑得话自行加上就可
const Message = obj => {
  let { during } = obj;
  during = during || 2000
  //这里data就是组件里面得data,如果没传就会使用main.vue里得data
  const msg = new MessageConstructor({data:obj})	
  msg.$mount()
  document.body.appendChild(msg.$el);
  setTimeout(() => {
    document.body.removeChild(msg.$el)
  }, during)
};

export default Message;

3.在main.js

import msg from "./components/message"
Vue.prototype.$msg = msg

**4.**在about.vue中

    <button @click="good">123</button>
    
methods: {
    good () {
      this.$msg({
        during: 2500
      })
    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值