Vue-创建应用/挂载应用/根组件模版-.vue单文件/应用配置
目录
应用实例
根组件
挂载应用
容器元素自己将不会被视为应用的一部分
那为什么还要在被挂载标签里面写东西呢?
.mount( ) 方法应该始终在整个应用配置和资源注册完成后被调用
什么是资源注册?
什么是应用实例?
什么是根实例?
DOM中的根组件模版
根组件模版特点:
根组件模版定义方式:
应用配置
.config
.component
多个应用实例
可以在 应用实例 API | Vue.js 里面浏览所有应用实例API
注:本文以MDN为基础
应用实例
每个 Vue 应用都是通过 createApp 函数创建的应用实例
import {createApp} from 'vue'const app=createApp({/*根组件选项*/
})
根组件
我们传入 createApp 的对象其实是一个组件,每个应用都需要一个“根组件”,其他组件会将作为根组件的子组件
如果使用的是单文件组件,我们可以直接从另一个文件导入根组件
import {createApp} from 'vue'import App from './App.vue'const app = createApp(App)
大多数真实的应用都是一颗嵌套的、可重用的组件树,例如
App (root component)
├─ TodoList
│ └─ TodoItem
│ ├─ TodoDeleteButton
│ └─ TodoEditButton
└─ TodoFooter├─ TodoClearButton└─ TodoStatistics
挂载应用
应用实例必须在调用了 .mount( ) 方法后才会渲染出来。该方法接收一个“容器”参数,可以是一个实际的 DOM 元素或是一个 CSS 选择器字符串,比如创业平台 index.html
<div id="app">
在 index.js 里面有(Vue2里面得用 CSS选择器:el:'#app',)
const app = createApp({// ...
})
app.mount('#app')
应用根组件的内容见会被渲染在容器元素里面,
容器元素自己将不会被视为应用的一部分
解释如下:Vue 实例挂载的 DOM 元素(容器元素)本身不会被 Vue 控制,只内部内容,比如
<div id="app" class="container"><p>这里的内容将被替换</p>
</div>
被挂载后
<div id="app" class="container"><!-- Vue 渲染的内容在这里 --><header>...</header><section>...</section><!-- 等等 -->
</div>
原来的 <p>这里的内容将被替换</p> 被完全替换了(除非没写 template 选项,这样会仍然使用 HTML中的模版,不会替换)
那为什么还要在被挂载标签里面写东西呢?
1.提供无JS情况下的内容(渐进式增强)
2.改善首屏体验:渲染Vue应用是需要时间的,在这段时间里面显示的是 HTML
3.还是老生常谈的 SEO 搜索引擎优化
4.为开发者提供挂载点的提示
5.避免闪烁或布局跳转
当执行 app.mount('#app') 进行挂载操作时,Vue 会找到 HTML 中的 <div id='#app'> 元素,然后将这个元素的内容替换为模版内容,但 <div id='#app'> 这个标签仍然是普通的 HTML元素,不受Vue控制
.mount( ) 方法应该始终在整个应用配置和资源注册完成后被调用
请注意,不同于其他资源注册方法,它的返回值是根组件实例而非应用实例,这样 方便访问根组件、支持链式调用、区分职责
什么是资源注册?
资源注册是指在 Vue 应用中全局活局部注册可以重复使用的内容,如组件、指令、插件等,这些注册的资源岁后可以应用在不同的部分(就像可以重复使用的模块、类 等等)
比如
// 注册Element Plus组件库
app.use(ElementPlus);// 注册所有Element Plus图标组件
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.component(key, component);
}
资源注册的主要类型包括:
1.组件注册 app.component(name,componentDefinition)
2.指令注册 app.directive(name,directiveDefinition)
3.插件注册 app.use(plugin,options)
4.mixin注册 app.mixin(mixinObeject)
什么是应用实例?
应用实例(Application Instance)是通过 Vue.createApp( ) 创建的对象,它是整个 Vue 赢得起点和配置中心,应用实例拥有:
1.全局API:比如上面说的 app.component( ) , app.directive( ) , app.use( )
2.全局配置:比如 app.config.errorHandler, app.config.performance 等
3.资源注册:可以在应用范围内注册组件和插件
4.挂载方式:通过 app.mount( ) 方法挂载到 DOM 元素上
什么是根实例?
根实例(Root Instance)是应用实例挂载到DOM后创建的组件实例,是组件树的顶层节点。它代表了整个Vue应用的根部,所有其他组件都是它的后代。
在Vue 3中,根实例是从您传递给 createApp() 的对象创建的,这个对象包含了组件的选项(如setup
函数)
总的来说,应用实例(app)只有一个,代表整个应用,而根实例(app.mount()返回值)可以有多个,每个挂载点一个,一般不需要保存,但需要从外部操作组件的时候需要保存根组件
(在 多个应用实例 中会进行更正)
DOM中的根组件模版
上面说了根实例是组件树的顶层节点,所以根组件是 Vue 应用的最外层组件,在 Vue 应用中,组件形成了树形结构,如
根组件├── 子组件A│ ├── 孙组件A1│ └── 孙组件A2└── 子组件B├── 孙组件B1└── 孙组件B2
根组件模版特点:
1.组件树的起点
2.替换挂载元素内容
3.接受根组件的数据和方法:根组件模版使用在 setup 函数中返回的所有数据和方法,例如 {{userInfo.name}} 、 @click= (事件监视器)等
根组件模版定义方式:
1.内联模版(Vue2)
2.外部HTML(即在挂载容器内编写),然后通过 JS 脚本挂载(就像创业平台中的 index.html 和 index.js 中写的)
3.单文件组件(.vue文件),这样就实现了组件的模版、样式、逻辑集成在一起,如
<!-- App.vue - 根组件 -->
<template><header class="header"><div class="user-info" v-show="isLogin">欢迎,{{ userInfo.name }}</div></header>
</template><script>
export default {setup() {// 这里是与模板关联的逻辑const isLogin = ref(true);const userInfo = ref({ name: '测试用户' });return { isLogin, userInfo };}
}
</script><style>
.header {/* 样式定义 */
}
</style>
就像我上面说的,如果没有设置 template 选项, Vue 会自动使用容器(HTML文件)内的 innerHTML 作为模版
应用配置
就像我上面在应用实例里面说的 “全局配置:比如 app.config.errorHandler, app.config.performance 等”,应用实例会暴露对象允许我们配置一些应用级的选项
例如一个应用级的错误处理器,用于捕捉所有字组件上的错误
.config
app.config.errorHandler = (err) => {/* 处理错误 */
}
.component
注册应用范围内的可用资源,例如注册一个组件(就像我在上面 资源注册 里面写的)
app.component('TodoDeleteButton', TodoDeleteButton)
这样 TodoDeleteButton 在应用的任何地方都是可用的
可以在 应用实例 API | Vue.js 里面浏览所有应用实例API
多个应用实例
我上面说 应用实例(app)只能有一个是错的
在 Vue2中只能有一个应用实例,但在 Vue3 中可以有多个
createApp 这个 应用实例API 允许在同一个页面创建多个共存的 Vue 应用,且每个应用都拥有自己的 配置作用域、全局组件注册、插件实例,会被挂载到不同 DOM 元素
const app1 = createApp({/* ... */
})
app1.mount('#container-1')const app2 = createApp({/* ... */
})
app2.mount('#container-2')
如果你正在使用 Vue 来增强服务端渲染 HTML,并且只想要 Vue 去控制一个大型页面中特殊的一小部分,应避免将一个单独的 Vue 应用实例挂载到整个页面上,而是应该创建多个小的应用实例,将它们分别挂载到所需的元素上去
一个页面可以有多个应用实例,一个应用实例一个根实例,每个根实例控制一个组件树
相关文章:
Vue-创建应用/挂载应用/根组件模版-.vue单文件/应用配置
目录 应用实例 根组件 挂载应用 容器元素自己将不会被视为应用的一部分 那为什么还要在被挂载标签里面写东西呢? .mount( ) 方法应该始终在整个应用配置和资源注册完成后被调用 什么是资源注册? 什么是应用实例? 什么是根实例&#…...

超低延迟音视频直播技术的未来发展与创新
引言 音视频直播技术正在深刻改变着我们的生活和工作方式,尤其是在教育、医疗、安防、娱乐等行业。无论是全球性的体育赛事、远程医疗、在线教育,还是智慧安防、智能家居等应用场景,都离不开音视频技术的支持。为了应对越来越高的需求&#x…...
虚拟文件(VFS)
核心知识点:虚拟文件系统(VFS) 1. 通俗易懂的解释 想象一下你家里的冰箱。你把食物放进去,不用管它是放在塑料盒里、玻璃罐里还是直接用保鲜膜包着,你只需要知道它在冰箱的哪个位置(比如“蔬菜抽屉里”&a…...

Java 内存模型(JMM)深度解析:理解多线程内存可见性问题
Java 内存模型(JMM)深度解析:理解多线程内存可见性问题 在 Java 编程中,多线程的运用能够显著提升程序的执行效率,但与此同时,多线程环境下的一些问题也逐渐凸显。其中,内存可见性问题是一个关…...

转移dp简单数学数论
1.转移dp问题 昨天的练习赛上有一个很好玩的起终点问题,第一时间给出bfs的写法。 但是写到后面发现不行,还得是的dp转移的写法才能完美的解决这道题目。 每个格子可以经过可以不经过,因此它的状态空间是2^(n*m)&…...
【大模型面试每日一题】Day 27:自注意力机制中Q/K/V矩阵的作用与缩放因子原理
【大模型面试每日一题】Day 27:自注意力机制中Q/K/V矩阵的作用与缩放因子原理 📌 题目重现 🌟🌟 面试官:请解释Transformer自注意力机制中Query、Key、Value矩阵的核心作用,并分析为何在计算注意力分数时…...
Ubuntu24.04 LTS安装java8、mysql8.0
在 Ubuntu 24.04 上安装 OpenJDK OpenJDK 包在 Ubuntu 24.04 的默认存储库中随时可用。 打开终端并运行以下 apt 命令: sudo apt update查看是否已经安装java java --version如果未安装会有提示,直接复制命令安装即可,默认版本: sudo apt in…...

动静态库--
目录 一 静态库 1. 创建静态库 2. 使用静态库 2.1 第一种 2.2 第二种 二 动态库 1. 创建动态库 2. 使用动态库 三 静态库 VS 动态库 四 动态库加载 1. 可执行文件加载 2. 动态库加载 一 静态库 Linux静态库:.a结尾 Windows静态库:.lib结尾…...
【检索增强生成(RAG)全解析】从理论到工业级实践
目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🧠 一、技术原理剖析📊 核心架构图解💡 核心工作流程🔧 关键技术模块⚖️ 技术选型对…...

git clone时出现无法访问的问题
git clone时出现无法访问的问题 问题: 由于我的git之前设置了代理,然后在这次克隆时又没有打开代理 解决方案: 1、如果不需要代理,直接取消 Git 的代理设置: git config --global --unset http.proxy git config --gl…...
Lesson 22 A glass envelope
Lesson 22 A glass envelope 词汇 dream v. 做梦,梦想 n. 梦 用法:1. have a dream 做梦 2. have a good / sweet dream 做个好梦 [口语晚安] 3. dream about 人/物 梦到…… 4. dream that 句子 梦到…… 例句:他昨晚…...

文件系统·linux
目录 磁盘简介 Ext文件系统 块 分区 分组 inode 再谈inode 路径解析 路径缓存 再再看inode 挂载 小知识 磁盘简介 磁盘:一个机械设备,用于储存数据。 未被打开的文件都是存在磁盘上的,被打开的加载到内存中。 扇区:是…...

【Matlab】雷达图/蛛网图
文章目录 一、简介二、安装三、示例四、所有参数说明 一、简介 雷达图(Radar Chart)又称蛛网图(Spider Chart)是一种常见的多维数据可视化手段,能够直观地对比多个指标并揭示其整体分布特征。 雷达图以中心点为原点&…...
【信息系统项目管理师】第24章:法律法规与标准规范 - 27个经典题目及详解
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17题】【第18题】【第19题】【第20题】【第…...

使用JProfiler进行Java应用性能分析
文章目录 一、基本概念 二、Windows系统中JProfiler的安装 1、下载exe文件 2、安装JProfiler 三、JProfiler的破解 四、IDEA中配置JProfiler 1、安装JProfiler插件 2、关联本地磁盘中JProfiler软件的执行文件 3、IDEA中启动JProfiler 五、监控本地主机中的Java应用 …...

遥感解译项目Land-Cover-Semantic-Segmentation-PyTorch之一推理模型
文章目录 效果项目下载项目安装安装步骤1、安装环境2、新建虚拟环境和安装依赖测试模型效果效果 项目下载 项目地址 https://github.com/souvikmajumder26/Land-Cover-Semantic-Segmentation-PyTorch 可以直接通过git下载 git clone https://github.com/souvikmajumder26/Lan…...
最大似然估计(Maximum Likelihood Estimation, MLE)详解
一、定义 最大似然估计 是一种参数估计方法,其核心思想是: 选择能使观测数据出现概率最大的参数值作为估计值。 具体来说,假设数据 D x 1 , x 2 , … , x n D{x_1,x_2,…,x_n} Dx1,x2,…,xn独立且服从某个概率分布 P ( x ∣ θ ) P(…...
【单片机】如何产生负电压?
以下是对知乎文章《单片机中常用的负电压是这样产生的!》的解析与总结,结合电路原理、应用场景及讨论要点展开: 一、负电压产生的核心原理 负电压本质是相对于参考地(GND)的电势差为负值,需通过电源或储能…...
Java 8 Stream 流操作全解析
文章目录 **一、Stream 流简介****二、Stream 流核心操作****1. 创建 Stream****2. 中间操作(Intermediate Operations)****filter(Predicate<T>):过滤数据****1. 简单条件过滤****2. 多条件组合****3. 过滤对象集合****4. 过滤 null 值…...
java线程中断的艺术
文章目录 引言java中的中断何时触发中断阻塞如何响应中断中断的一些实践基于标识取消任务如何处理阻塞式的中断合理的中断策略时刻保留中断的状态超时任务取消的最优解处理系统层面阻塞IO小结参考引言 我们通过并发编程提升了系统的吞吐量,特定场景下我们希望并发的线程能够及…...
【信息系统项目管理师】一文掌握高项常考题型-项目进度类计算
更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 一、进度类计算的基本概念1.1 前导图法1.2 箭线图法1.3 时标网络图1.4 确定依赖关系1.5 提前量与滞后量1.6 关键路径法1.7 总浮动时间1.8 自由浮动时间1.9 关键链法1.10 资源优化技术1.11 进度压缩二、基本公式…...
HarmonyOS 鸿蒙应用开发基础:转换整个PDF文档为图片功能
在许多应用场景中,将PDF文档的每一页转换为单独的图片文件是非常有帮助的。这可以用于文档的分享、扫描文档的电子化存档、或者进行进一步的文字识别处理等。本文将介绍如何使用华为HarmonyOS提供的PDF处理服务将整个PDF文档转换为图片,并将这些图片存放…...
Flask-SQLAlchemy核心概念:模型类与数据库表、类属性与表字段、外键与关系映射
前置阅读,关于Flask-SQLAlchemy支持哪些数据库及基本配置,链接:Flask-SQLAlchemy_数据库配置 摘要 本文以一段典型的 SQLAlchemy 代码示例为引入,阐述以下核心概念: 模型类(Model Class) ↔ 数…...
刷题 | 牛客 - js中等题-下(更ing)30/54知识点解答
知识点汇总: 数组: Array.prototype.pop():从数组末尾删除一个元素,并返回这个元素。 Array.prototype.shift():从数组开头删除一个元素,并返回这个元素。 array.reverse():将数组元素反转顺…...
RAM(随机存取存储器)的通俗解释及其在路由器中的作用
RAM(随机存取存储器)的通俗解释及其在路由器中的作用 一、RAM是什么? RAM(Random Access Memory) 就像餐厅的“临时工作台”: 核心作用:临时存储正在处理的任务(如厨师同时处理多道…...

六、【前端启航篇】Vue3 项目初始化与基础布局:搭建美观易用的管理界面骨架
【前端启航篇】Vue3 项目初始化与基础布局:搭建美观易用的管理界面骨架 前言技术选型回顾与准备准备工作第一步:进入前端项目并安装 Element Plus第二步:在 Vue3 项目中引入并配置 Element Plus第三步:设计基础页面布局组件第四步…...
【项目需求分析文档】:在线音乐播放器(Online-Music)
1. 用户管理模块 1.1 注册功能 功能描述 提供注册页面,包含用户名、密码输入框及提交按钮。用户名需唯一性校验,密码使用 BCrypt 加密算法存储。注册成功后自动跳转至登录页面。 1.2 登录功能 功能描述 提供登录页面,包含用户名、密码输入…...

C++ 前缀和数组
一. 一维数组前缀和 1.1. 定义 前缀和算法通过预处理数组,计算从起始位置到每个位置的和,生成一个新的数组(前缀和数组)。利用该数组,可以快速计算任意区间的和,快速求出数组中某一段连续区间的和。 1.2. …...
PHP 实现通用数组字段过滤函数:灵活去除或保留指定 Key
PHP 实现数组去除或保留指定字段的通用函数详解 一、文章标题 《PHP 实现通用数组字段过滤函数:灵活去除或保留指定 Key》 二、摘要 在实际开发中,我们经常需要对数组进行字段级别的操作,例如从一个数组中删除某些敏感字段(如密码、token),或者只保留特定字段用于接口…...
NACOS2.3.0开启鉴权登录
环境 名称版本nacos2.3.0(Linux)java java version "17.0.14" 2025-01-21 LTS # # Copyright 1999-2021 Alibaba Group Holding Ltd. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use thi…...