当前位置: 首页 > news >正文

2.1 vue组件

入口文件详解 

在 Vue 2 项目中,main.js 文件扮演着至关重要的角色。它通常是整个应用程序的入口点,负责初始化 Vue 实例,并将这个实例挂载到 HTML 文档中的一个特定元素上。以下是对 main.js 文件的详细解析:

基础结构

import Vue from 'vue';
import App from './App.vue';Vue.config.productionTip = false;new Vue({render: h => h(App),
}).$mount('#app');

组件详解

  1. 引入 Vue 和根组件:

    • import Vue from 'vue';:导入 Vue 库,这是使用 Vue 框架的前提。
    • import App from './App.vue';:导入项目的根组件(通常命名为 App.vue),它是所有其他组件的父组件。
  2. 配置项:

    • Vue.config.productionTip = false;:默认情况下,当你的应用处于生产环境时,Vue 会在控制台输出一条提示消息。设置为 false 可以禁用这条提示。
  3. 创建 Vue 实例:

    • 使用 new Vue({ ... }) 创建一个新的 Vue 实例。
    • render: h => h(App):这是一个简写形式的渲染函数,用来渲染 App 组件。这里的 h 是 createElement 的缩写,它是一个用来生成虚拟 DOM 节点的函数。
  4. 挂载 Vue 实例:

    • .$mount('#app'):手动将 Vue 实例挂载到 HTML 文档中 id 为 #app 的元素上。等同于在选项中直接设置 el: '#app'

 子组件和父组件

根组件是Vue应用的入口组件,通常是通过new Vue()创建的实例组件,在项目中对应App.vue 文件,它是所有其他组件的父组件,形成组件树的顶层结构。子组件则是被根组件或其他父组件包含的组件,通过嵌套方式存在于组件树中,用于封装独立的功能模块 

生命周期执行顺序(父子组件场景)

初始化阶段:

父beforeCreate

→ 父created → 父beforeMount → 子beforeCreate → 子created → 子beforeMount → 子mounted → 父mounted

更新阶段:

父beforeUpdate

→ 子beforeUpdate → 子updated → 父updated

销毁阶段:

父beforeDestroy

→ 子beforeDestroy → 子destroyed → 父destroyed

关键注意事项

  1. mounted$nextTickmounted不保证子组件全部挂载,需等待所有DOM就绪时使用this.$nextTick(() => { ... })
  2. 避免在updated中修改数据:可能导致死循环,如需修改可在beforeUpdate中处理。

根组件与子组件的应用场景

  • 根组件:负责全局状态管理、路由配置、应用入口等顶层逻辑。
  • 子组件:封装页面中的独立功能模块,如列表项、按钮、表单等,通过props接收根组件传递的配置数据,通过事件与根组件交互,实现功能解耦和复用。

vue组件组成部分 

Vue 2 是一个流行的渐进式 JavaScript 框架,用于构建用户界面。组件是 Vue 中的核心概念之一,它们允许你将用户界面分割成独立且可复用的部分。每个 Vue 组件通常包含以下部分:

  1. 模板(Template): 使用HTML来声明组件的布局和结构。
  2. 脚本(Script): 包含逻辑代码,通过选项如 datamethodscomputed 等定义组件的行为。
  3. 样式(Style): 可选地,你可以为组件定义样式,并且可以使用 scoped 属性限制样式仅应用于当前组件。

基础结构

一个基本的 Vue 2 组件如下所示:

<template><div class="example">{{ message }}</div>
</template><script>
export default {data() {return {message: 'Hello Vue!'}},methods: {// 定义方法},computed: {// 计算属性},// 其他选项...
}
</script><style scoped>
.example {color: blue;
}
</style>

关键概念

 data 必须为函数


data 为什么必须是函数?

核心原因:避免数据污染
  • 问题场景:若 data 直接定义为对象,多个组件实例会共享同一数据对象
    // ❌ 错误写法(导致所有实例共享数据)
    data: { count: 0 }
    
  • 正确写法data 必须是函数,每次创建实例时返回独立的数据副本
    // ✅ 正确写法(每个实例拥有独立数据)
    data() {return { count: 0 } // 函数返回新对象
    }
    
底层原理 

Vue 在创建组件实例时,会调用 data 函数生成响应式数据对象。若直接使用对象,所有实例将指向同一内存地址,修改一处会影响所有实例。

http://www.dtcms.com/a/313791.html

相关文章:

  • 音视频学习笔记
  • Apache Spark 的结构化流
  • LiveQing视频推流点播流媒体常见问题-分屏展示页面如何显示直播间的名称多分屏视频画面监控
  • javacc学习笔记 02、JavaCC 语法描述文件的格式解析
  • iOS 内测上架流程详解:跨平台团队如何快速部署 TestFlight
  • iostat 系统IO监控命令学习
  • 墨者学院SQL过滤字符后手工注入漏洞测试(第1题)
  • uniapp快遞上門提貨的時間選擇的插件
  • Perl 面向对象编程深入解析
  • 【Git】常见命令整理
  • 工作流绑定卡片优化用户体验-练习我要找工作智能体
  • 人类学家与建筑师:解析 UX 研究与项目管理的需求分析差异​
  • 豆包新模型+PromptPilot深度评测:提示词工程的智能化突破
  • 数据结构:合并两个单链表(merging two linked lists)
  • 下面是修正后的完整版 doit_effects.c,已经做了三大关键修复(文件开头也有注释说明)
  • 使用opencv基于realsense D435i展示基本的图像
  • 如何基于MQ实现分布式事务
  • 深入浅出 RabbitMQ:简单队列实战指南
  • 消防器材检测数据集介绍-9,600 张图片 智慧安防系统 建筑施工安全监管 AI 消防巡检机器人 自动审核系统 公共场所安全监测
  • 深入解析线程同步中WaitForSingleObject的超时问题
  • Flutter 事件总线 Event Bus
  • 【2025WACV-最佳论文】RayGauss:基于体积高斯的光线投射,用于逼真的小说视图合成
  • 【机器学习】(算法优化二)提升算法之:AdaBoost与随机梯度
  • Java 中 BigDecimal、Float、Double 的取整与保留小数处理方法详解
  • 从 0 到 1 开发图书管理系统:飞算 JavaAI 让技术落地更简单
  • 13.Home-面板组件封装
  • 如何设计和实施高效的向量化数据检索解决方案
  • 阿里云-通义灵码:解锁云原生智能开发新能力,让云开发更“灵”~
  • Clion STM32CubeMX LED闪灯
  • 为什么叫电磁兼容?