使用Vue.entends()编写vue插件,然后插入dom元素中

203 篇文章 4 订阅
46 篇文章 2 订阅

子组件 Son.vue

<template>
  <div>
    我是一个子组件内容,里面可以任意拓展
    接受到父组件值为{{msg}}
  </div>
</template>

<script>
export default {
props:{
  msg:{
    type:String,// 这里还可以接受父组件传参
    default:'',
  }
}
}
</script>

<style>

</style>

父组件:

  <template>
  <div id='box'>
   
  </div>
</template>
import Son from '@/components/Son.vue'
export default {
components:{
Son 
}
 mounted() {
  const Son= Vue.extend(Toast)
        const instance = new Son({
            propsData: {
              msg:"子组件信息"
            } // 这里必须是propsData
        })
 let box = document.getElementById('box');
   // instance.$mount().$el 该段代码意义为:
   // 文档之外渲染,并且获取该实例的根DOM元素,将其插入到body元素中。
   box.appendChild(instance.$mount().$el) 
}
 }
}

父组件中显示如下:
在这里插入图片描述


很多人会疑问 instance.$mount().$el 是啥意思?

我们先看看官网解释:

在这里插入图片描述
我们的情况是

  1. Vue 实例在实例化时没有收到 el 选项,则它处于“未挂载”状态,没有关联的 DOM 元素。可以使用 vm.$mount() 手动地挂载一个未挂载的实例。

  2. 如果没有提供 elementOrSelector 参数,模板将被渲染为文档之外的的元素,并且你必须使用原生 DOM API 把它插入文档中。

刚好满足以上两点。

有无其他写法:

肯定有,我们传给 el 选项试试:

  const instance = new ToastMain({
          el:document.createElement("div"),
            propsData: {
              msg:"子组件信息"
            } // 这里必须是propsData
        })
    	// Vue 实例在实例化时收到了 el 选项,则它处于“挂载”状态,无需用$mount() 手动挂载
        let box = document.getElementById('box');
        console.log("box是",box);
        box.appendChild(instance.$el) 

Vue.entends()的作用之一:

可以快速的将写好的组件插入dom元素中,提高开发效率。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值