vue自定义组件插入到body中的实现方式

 更新时间:2025年12月13日 14:31:34   作者:@红@旗下的小兵  
文章介绍了如何在Vue中创建一个自定义的notice提醒组件,并将其插入到body中,该组件通过调用`show`方法显示,调用`remove`方法销毁,主要步骤包括创建组件、使用render函数加载、$mount挂载并插入到body中

vue自定义组件插入到body中

以notice提醒组件为例,调用组件,如下:

实现了两个方法

  • show方法时显示组件
  • remove方法销毁组件
// 加载组件
let noticeCom = vm.$create({
    title: '提醒标题', 
    content: '提醒内容',
    duration: 2000 // 组件的显示时长
}).show()
// 销毁
noticeCom.remove()

实现思路

  • (1)首先创建组件
  • (2)使用render函数加载组件
  • (3)$mount挂载组件,把组件渲染为真实dom
  • (4)把dom插入到body中去

Notice.vue组件:

<!--Notice.vue组件-->
<template>
  <div v-if="isShow" class="notices">
     <div>{{title}}</div><div>{{contents}}</div>
  </div>
</template>
<script>
export default {
    props: {title: String, contents: String, duration: Number},
    data() {return {isShow: false}},
    methods: {
        show() { // show 方法控制组件的显示
            this.isShow = true
            let timer = setTimeout(() => {
                this.isShow = false
                clearTimeout(timer)
            }, this.duration)
        }
    }
}
</script>

在main.js中,把渲染Notice组件的方法挂载到vue实例上:

// main.js 把notice组件渲染挂载到vue实例上
import notice from "@/components/notice.js"
Vue.prototype.$create = notice

notice.js:

// notice.js 加载组件的主文件
import Vue from 'vue'
export default function create(component, props) {
    let vm = new Vue({
        // 使用render函数渲染组件
        render(h) {
            return h(component,{props})
        }
    }).$mount()
    document.body.appendChild(vm.$el) // vm.$el 是Notice组件挂载的根节点<div class="notices">··· ···</div>
    const noticeComponent = vm.$children[0]
    // 组件挂载销毁实例的方法(实际就是删除dom)
    noticeComponent.removeNotice = function () {
        document.body.remove(vm.$el)
    }
    return noticeComponent
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue-ANTD表单输入中自定义校验一些正则表达式规则介绍

    Vue-ANTD表单输入中自定义校验一些正则表达式规则介绍

    这篇文章主要介绍了Vue-ANTD表单输入中自定义校验一些正则表达式规则介绍,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • echarts3如何清空上一次加载的series数据

    echarts3如何清空上一次加载的series数据

    这篇文章主要介绍了echarts3如何清空上一次加载的series数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue标签属性动态传参并拼接字符串的操作方法

    Vue标签属性动态传参并拼接字符串的操作方法

    这篇文章主要介绍了Vue标签属性动态传参并拼接字符串的操作方法,我们需要根据传入值的类型,在placeholder属性赋值"请输入长度",“请输入宽度”,"请输入厚度"等提示字符,本文通过实例代码介绍的非常详细,需要的朋友参考下吧
    2023-11-11
  • 基于Vue3实现数字华容道游戏的示例代码

    基于Vue3实现数字华容道游戏的示例代码

    这篇文章主要为大家详细介绍了如何利用Vue编写一个数字华容道游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue项目兼容IE浏览器的教程步骤

    vue项目兼容IE浏览器的教程步骤

    Vue的小伙伴们,困扰大家的IE浏览器支持Vue的问题,目前已经找到了一个比较好的解决方案,下面这篇文章主要给大家介绍了关于vue项目兼容IE浏览器的教程步骤,需要的朋友可以参考下
    2023-03-03
  • 利用Vue3封装一个弹框组件简单吗

    利用Vue3封装一个弹框组件简单吗

    最近在项目中自己封装的一个记录一下,下面这篇文章主要给大家介绍了关于利用Vue3封装一个弹框组件的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • Vue防抖与节流的使用介绍

    Vue防抖与节流的使用介绍

    防抖和节流的作用都是防止函数多次调用,下面这篇文章主要给大家介绍了关于vue函数防抖与节流的正确使用方法,需要的朋友可以参考下
    2022-12-12
  • vue实现表格合并功能

    vue实现表格合并功能

    这篇文章主要为大家详细介绍了vue实现表格合并功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 解决ant-design-vue安装报错的问题

    解决ant-design-vue安装报错的问题

    这篇文章主要介绍了解决ant-design-vue安装报错的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 在vue中添加Echarts图表的基本使用教程

    在vue中添加Echarts图表的基本使用教程

    虽然老早就看过很多echarts的例子, 但自己接触的项目中一直都没有真正用到过,直到最近才开始真正使用,下面这篇文章主要给大家介绍了关于在vue中添加Echarts图表的基本使用教程,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2017-11-11

最新评论