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

前言

目前工作还是以 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 是有差异的:

  • Vue2 被渲染的内容会替换我们要挂载的目标元素;
  • Vue3 被渲染的应用会作为子元素插入,从而替换目标元素的 innerHTML。
  • 详见《Vue 3 迁移指南 - Mount API 的变化》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/342933.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

脑科学与人工神经网络ANN的发展历程与最新研究

本文深入研究了ANN的基本概念、发展背景、应用场景以及与人脑神经网络的关系。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的…

虹软人脸识别白屏

1.修改jdk为1.8 2.编译版本ndk修改 ndk {abiFilters armeabi-v7a, arm64-v8a} 3.local.properties增加ndk路径 ndk.dirH\:\\Android\\SDK\\ndk\\21.1.6352462 4.最重要的一步:检查依赖库是否存在前一定要先检查有么有读取本地文件权限,下面的代码即使是放到点击事件的回调…

访问学者申请需要注意什么?

访问学者申请是一项复杂而重要的过程&#xff0c;需要申请人在准备材料和过程中注意一些关键事项&#xff0c;以确保顺利完成申请并提高成功率。以下是知识人网小编的一些建议&#xff0c;希望对你的访问学者申请有所帮助。 1. 详细了解目标学术机构&#xff1a; 在申请访问学…

ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式

ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式 前提docker环境已经安装好 如未安装&#xff0c;请参考博文https://blog.csdn.net/a554521655/article/details/134251763 文章目录 ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式安装emqx查看是否安装并启动成功登录前端查 安…

毕业2年,存款达到700W,我选择躺平!

毕业2年&#xff0c;存款达到700W&#xff0c;我选择躺平&#xff01; 最近一个字节跳动员工的爆料引发了大家对生活意义的思考。这位员工毕业两年&#xff0c;却已经存款达到700万元&#xff0c;并选择了“躺平”。 当今社会&#xff0c;职场竞争与生活压力的存在是普遍的现…

three.js 使用 tweenjs绘制相机运动动画

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…

反爬虫策略:使用FastAPI限制接口访问速率

目录 引言 一、网络爬虫的威胁 二、FastAPI 简介 三、反爬虫策略 四、具体实现 五、其他反爬虫策略 六、总结 引言 在当今的数字时代&#xff0c;数据已经成为了一种宝贵的资源。无论是商业决策、科学研究还是日常生活&#xff0c;我们都需要从大量的数据中获取有价值的…

高斯数据库 Gauss

gauss DB OLTP 交易 保证数据和安全&#xff0c;主要是银行使用 gauss DB OLAP 分析 大部分是网络公司 gsql 使用gauss数据库的工具 $ gsql -d 数据库名 -p 端口号 -u 用户名 -w 密码 -h 客户端ipgsql 常用参数 -d选项&#xff1a; 指定gsql客户端连接的数据库-h选项&#xff1…

SCA|可作为有效改进策略的算法——正余弦优化算法(Matlab/Python)

正余弦优化算法(Sine cosine algorithm&#xff0c;SCA)是由Mirjalili [1]在2016年提出&#xff0c;目前WOS上引用量2K&#xff0c;谷歌学术上4K。 不得不说Seyedali Mirjalili真是位大神级的人物(下图是Mirjalili开发的部分算法) SCA的核心思想是利用正、余弦函数波动的周期性…

uni-app修改头像和个人信息

效果图 代码&#xff08;总&#xff09; <script setup lang"ts"> import { reqMember, reqMemberProfile } from /services/member/member import type { MemberResult, Gender } from /services/member/type import { onLoad } from dcloudio/uni-app impor…

C++_虚函数表

虚函数表 介绍源码运行结果笔记扩充函数名联编静态联编动态联编 介绍 1.编译器通过指针或引用调用虚函数&#xff0c;不会立即生成函数调用指令&#xff0c;而是用 二级函数指针 代替 1.1确定真实类型 1.2找到虚函数表从而找到入口地址 1.3根据入口地址调用函数(PS:俗称 函数指…

谈谈Spring Bean

一、IoC 容器 IoC 容器是 Spring 的核心&#xff0c;Spring 通过 IoC 容器来管理对象的实例化和初始化&#xff08;这些对象就是 Spring Bean&#xff09;&#xff0c;以及对象从创建到销毁的整个生命周期。也就是管理对象和依赖&#xff0c;以及依赖的注入等等。 Spring 提供…