Vue-创建应用/挂载应用/根组件模版-.vue单文件/应用配置

news2025/5/25 22:42:22

目录

应用实例

根组件

挂载应用

容器元素自己将不会被视为应用的一部分

那为什么还要在被挂载标签里面写东西呢?

.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 应用实例挂载到整个页面上,而是应该创建多个小的应用实例,将它们分别挂载到所需的元素上去

一个页面可以有多个应用实例,一个应用实例一个根实例,每个根实例控制一个组件树

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超低延迟音视频直播技术的未来发展与创新

引言 音视频直播技术正在深刻改变着我们的生活和工作方式&#xff0c;尤其是在教育、医疗、安防、娱乐等行业。无论是全球性的体育赛事、远程医疗、在线教育&#xff0c;还是智慧安防、智能家居等应用场景&#xff0c;都离不开音视频技术的支持。为了应对越来越高的需求&#x…

Java 内存模型(JMM)深度解析:理解多线程内存可见性问题

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

转移dp简单数学数论

1.转移dp问题 昨天的练习赛上有一个很好玩的起终点问题&#xff0c;第一时间给出bfs的写法。 但是写到后面发现不行&#xff0c;还得是的dp转移的写法才能完美的解决这道题目。 每个格子可以经过可以不经过&#xff0c;因此它的状态空间是2^&#xff08;n*m&#xff09;&…

动静态库--

目录 一 静态库 1. 创建静态库 2. 使用静态库 2.1 第一种 2.2 第二种 二 动态库 1. 创建动态库 2. 使用动态库 三 静态库 VS 动态库 四 动态库加载 1. 可执行文件加载 2. 动态库加载 一 静态库 Linux静态库&#xff1a;.a结尾 Windows静态库&#xff1a;.lib结尾…

git clone时出现无法访问的问题

git clone时出现无法访问的问题 问题&#xff1a; 由于我的git之前设置了代理&#xff0c;然后在这次克隆时又没有打开代理 解决方案&#xff1a; 1、如果不需要代理&#xff0c;直接取消 Git 的代理设置&#xff1a; git config --global --unset http.proxy git config --gl…

文件系统·linux

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

【Matlab】雷达图/蛛网图

文章目录 一、简介二、安装三、示例四、所有参数说明 一、简介 雷达图&#xff08;Radar Chart&#xff09;又称蛛网图&#xff08;Spider Chart&#xff09;是一种常见的多维数据可视化手段&#xff0c;能够直观地对比多个指标并揭示其整体分布特征。 雷达图以中心点为原点&…

使用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…

六、【前端启航篇】Vue3 项目初始化与基础布局:搭建美观易用的管理界面骨架

【前端启航篇】Vue3 项目初始化与基础布局&#xff1a;搭建美观易用的管理界面骨架 前言技术选型回顾与准备准备工作第一步&#xff1a;进入前端项目并安装 Element Plus第二步&#xff1a;在 Vue3 项目中引入并配置 Element Plus第三步&#xff1a;设计基础页面布局组件第四步…

C++ 前缀和数组

一. 一维数组前缀和 1.1. 定义 前缀和算法通过预处理数组&#xff0c;计算从起始位置到每个位置的和&#xff0c;生成一个新的数组&#xff08;前缀和数组&#xff09;。利用该数组&#xff0c;可以快速计算任意区间的和&#xff0c;快速求出数组中某一段连续区间的和。 1.2. …

细胞冻存的注意事项,细胞冻存试剂有哪些品牌推荐

细胞冻存的原理 细胞冻存的基本原理是利用低温环境抑制细胞的新陈代谢&#xff0c;使细胞进入一种“休眠”状态。在低温条件下&#xff0c;细胞的生物活动几乎停止&#xff0c;从而实现长期保存。然而&#xff0c;细胞在冷冻过程中可能会因为细胞内外水分结冰形成冰晶而受损。…

快速上手Linux火墙管理

实验网络环境&#xff1a; 主机IP网络f1192.168.42.129/24NATf2&#xff08;双网卡&#xff09; 192.168.42.128/24 192.168.127.20/24 NAT HOST-NOLY f3192.168.127.30/24HOST-ONLY 一、iptables服务 1.启用iptables服务 2.语法格式及常用参数 语法格式&#xff1a;参数&…

[创业之路-375]:企业战略管理案例分析 - 华为科技巨擘的崛起:重构全球数字化底座的超级生命体

在人类文明从工业时代&#xff08;机械、电气、自动化&#xff09;迈向数字智能&#xff08;硬件、软件、算法、虚拟、智能&#xff09;时代的临界点上&#xff0c;一家中国企业正以令人震撼的姿态重塑全球科技版图。从通信网络的底层架构到智能终端的生态闭环&#xff0c;从芯…

AI基础知识(05):模型提示词、核心设计、高阶应用、效果增强

目录 一、核心设计原则 二、高阶应用场景 三、突破性技巧 以下是针对DeepSeek模型的提示词设计思路及典型应用场景示例&#xff0c;帮助挖掘其潜在能力&#xff1a; 一、核心设计原则 1. 需求明确化&#xff1a;用「角色定位任务目标输出格式」明确边界 例&#xff1a;作为历…

推测解码算法在 MTT GPU 的应用实践

前言​ 目前主流的大模型自回归解码每一步都只生成一个token, 尽管kv cache等技术可以提升解码的效率&#xff0c;但是单个样本的解码速度依然受限于访存瓶颈&#xff0c;即模型需要频繁从内存中读取和写入数据&#xff0c;此时GPU的利用率有限。为了解决这种问题&#xff0c;…

Axure酒店管理系统原型

酒店管理系统通常被设计为包含多个模块或界面&#xff0c;以支持酒店运营的不同方面和参与者。其中&#xff0c;管理端和商户端是两个核心组成部分&#xff0c;它们各自承担着不同的职责和功能。 软件版本&#xff1a;Axure RP 9 预览地址&#xff1a;https://556i1e.axshare.…

写实交互数字人在AI招聘中的应用方案

随着科技的进步&#xff0c;越来越多的行业开始探索如何利用人工智能提升效率和服务质量。其中&#xff0c;写实交互数字人技术以其高度拟真的交互体验和丰富的情感表达能力&#xff0c;在人力资源领域特别是招聘环节中展现出了巨大潜力。本文将探讨写实交互数字人在AI招聘中的…

房贷利率计算前端小程序

利率计算前端小程序 视图效果展示如下&#xff1a; 在这里插入代码片 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&qu…

在Visual Studio中进行cuda编程

首先下载与CUDA Toolkit匹配的Visual Studio版本 比如我的CUDA Toolkit版本是12.6&#xff0c;那么我可以使用2022的Visual Studio。 查看Toolkit版本 nvcc -V 配置 ok&#xff0c;让我们开始Visual Studio的nvcc编译器配置 参考例文https://github.com/apachecn/succinc…