如果把vue组件动态添加到body上?

tools.js:

javascript 复制代码
import Vue from 'vue'
 
/**
 * @param Component 组件实例的选项对象
 * @param props 组件实例中的prop
 */
export function create(Component, props) {
  const comp = new (Vue.extend(Component))({ propsData: props }).$mount()
   
  document.body.appendChild(comp.$el)
 
  comp.remove = () => {
    document.body.removeChild(comp.$el)
 
    comp.$destroy()
  }
 
  return comp
}

App.js:

javascript 复制代码
<template>
  <div class="m-feedback-out-wrap">
    <el-button @click="handleAdd">添加</el-button>
  </div>
</template>

<script>
import { Feedback } from './feedback'
import { Button } from 'element-ui'
import { create } from './tools'
import './index.css'

let feeback
export default {
  name: 'App',
  data() {
    return {}
  },
  components: {
    [Button.name]: Button,
    Feedback,
  },
  mounted() {
    this.handleAdd()
  },
  methods: {
    handleAdd() {
      if (feeback) {
        feeback.remove()
      }
      feeback = create(Feedback)
    },
    handleInit() {
      let node = document.getElementById('m-feedback')
      if (node) {
        node.parentNode.removeChild(node)
      }
      let newElement = document.createElement('div')
      newElement.id = 'm-feedback'
      newElement.innerHTML = 'Hello World'
      document.body.appendChild(newElement)
    },
  },
}
</script>

我开发的chatgpt项目:

https://chat.xutongbao.top/

相关推荐
你脑门上的脚印11 分钟前
Vue 项目从零实现语音转文字、文字转语音功能(完整可用 + 踩坑指南)
前端·vue.js
悟空瞎说1 小时前
# Dispatch(GCD)苹果官方文档 白话文讲解(Objective‑C 版本文档)
javascript
七牛开发者1 小时前
Coding Agent 如何跑稳长任务?从上下文管理到运行时状态
前端·javascript·后端
七牛开发者1 小时前
拆解 DeepSeek Harness:Profile 与 Bundle 如何装配运行时
前端·javascript·后端
lemon_yyds2 小时前
H5 页面嵌入 APP 的 web-view 时-调用原生能力(uniapp)
vue.js
九九落3 小时前
北京时间校准怎么做?电脑和手机时间不准的排查方法
javascript
念何架构之路3 小时前
Gin响应渲染
前端·javascript·gin
ITmaster07314 小时前
Vibe Coding 时代:Vue 消失了还是 React 太强?
前端·vue.js·react.js
WebInfra4 小时前
Rspack 2.2 发布:30+ 项性能优化,拥抱 Solid 2.0
前端·javascript·前端框架
万敏4 小时前
Vue3 全栈实战第七周:错误处理与请求层封装实战记录
vue.js·node.js·全栈