《Vue2 进阶知识》动态挂载组件之Vue.extend + vm.$mount

本文介绍了在Vue2中如何动态挂载和销毁组件,包括使用Vue.extend和$mount方法。同时提到了Vue2和Vue3在挂载方式上的区别。
摘要由CSDN通过智能技术生成

前言

目前工作还是以 Vue2 为主,今早有人提问 如何动态挂载组件? 话说很久很久以前就实现过,今天再详细的整理一下此问题!

开始

动态组件如下,是个简单的例子:

  • 但请注意这里给了个 id="test2"
  • 可传入 props 参数 name
// 文件名 AComponents.vue
<template>
    <h1 id="test2">这是 A 组件.{{name}}</h1>
</template>
<script>
export default {
    props: {
        name: {
            type: String,
            default: ''
        }
    }
}
</script>

重点来了:

  • 方法 addNode 创建节点;
  • 方法 extendComponent 挂载组件,使用 全局 API Vue.extend实例方法vm.$mount
  • 方法 destoryComponent 销毁组件,注意是寻找 idtest2,因为 test 已被替换;
<template>
	<div class="extend-main">
		<button @click="addNode">创建节点</button>
		<button @click="extendComponent">挂载组件</button>
		<button @click="destoryComponent">销毁组件</button>
	</div>
</template>
<script>
import Vue from 'vue'
import AComponents from './../components/AComponents.vue'
export default {
    methods: {
        // 创建节点
        addNode() {
            // body 最后创建一个 id 为 test 节点
            const divEl = document.createElement('div');
            divEl.id = 'test';
            document.body.appendChild(divEl);
        },
        // 挂载组件
        extendComponent() {
            // 使用基础 Vue 构造器,创建一个“子类”
            const AComponentsEx = Vue.extend(AComponents);
            // 创建实例,并挂载到指定 id 上
            const aComponents = new AComponentsEx().$mount('#test');
            // 可传入 props 值
            aComponents.$props.name = '这是一个测试!';
        },
        // 销毁组件
        destoryComponent() {
            // 注意此时没有 id 为 test 的节点,已被 id test2 替换
            const testEl = document.getElementById('test2');
            document.body.removeChild(testEl); 
        }
    }
}
</script>

效果

点击按钮 创建节点,body 新增 div。

在这里插入图片描述
点击按钮 挂载组件,新组件已替换。

在这里插入图片描述

点击按钮 销毁组件,div 被删除。

在这里插入图片描述

最后

2024年Vue3 的时代!上述的挂载组件,Vue2Vue3 是有差异的:

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值