一、Vue2 项目环境搭建

1. 环境准备
  • 安装 Node.js:推荐使用 nvm 管理多版本 Node

    # 安装Node 16.20.2
    nvm install 16.20.2
    # 切换至指定版本
    nvm use 16.20.2
    # 验证安装
    node -v && npm -v
    
  • 安装 Vue CLI 脚手架

    # 国内镜像源安装
    npm install --registry=https://registry.npmmirror.com @vue/cli -g
    # 验证安装
    vue -V
    
2. 创建项目
  • 命令行方式

    vue create my-vue2-project
    # 选择"Default (Vue 2)"模板或手动配置
    
  • UI 界面方式

    vue ui
    

    在浏览器打开的 UI 界面中,点击 "创建项目",选择路径并配置选项。
3. 项目基本配置

在项目根目录创建vue.config.js

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({// 关闭代码格式校验lintOnSave: false,// 配置跨域代理devServer: {proxy: {'/api': {target: 'http://localhost:3000',changeOrigin: true,pathRewrite: {'^/api': ''}}}},// 打包配置configureWebpack: {optimization: {splitChunks: {chunks: 'all'}}}
})
二、项目目录结构解析

典型的 Vue2 项目结构如下:

my-vue2-project/
├── public/                  # 静态资源(HTML模板、图标等)
├── src/
│   ├── assets/              # 样式、图片等资源
│   ├── components/          # 组件文件夹
│   ├── router/              # 路由配置
│   ├── store/               # Vuex状态管理
│   ├── utils/               # 工具函数
│   ├── views/               # 页面级组件
│   ├── App.vue              # 根组件
│   └── main.js              # 入口文件
├── .gitignore              # Git忽略文件
├── babel.config.js          # Babel配置
├── package.json             # 依赖管理
└── README.md                # 项目说明
三、组件化开发核心
1. 组件基本结构

一个 Vue 组件由三部分组成:

<template><div class="component-container"><!-- 模板层,只能有一个根元素 --><h3>{{ title }}</h3><p>内容:{{ content }}</p></div>
</template><script>
export default {name: 'ComponentName', // 组件名(首字母大写)props: {title: {type: String,default: '默认标题'},content: {type: String,required: true}},data() {return {internalData: '组件内部数据'}},methods: {handleClick() {console.log('组件方法被调用')}},mounted() {console.log('组件挂载完成')}
}
</script><style scoped>
/* 样式层,scoped确保样式仅作用于当前组件 */
.component-container {padding: 16px;border: 1px solid #eee;
}
</style>
2. 组件注册方式
  • 局部注册:在父组件中引入并注册

    <!-- 父组件 -->
    <template><div><HeaderComponent /><MainContent /></div>
    </template><script>
    // 1. 引入组件
    import HeaderComponent from './components/Header.vue'
    import MainContent from './components/MainContent.vue'export default {components: {// 2. 注册组件(可自定义标签名)HeaderComponent, // 等价于 HeaderComponent: HeaderComponentMainContent}
    }
    </script>
    
  • 全局注册:在 main.js 中注册

    // main.js
    import Vue from 'vue'
    import App from './App.vue'
    import FooterComponent from './components/Footer.vue'// 全局注册组件
    Vue.component('FooterComponent', FooterComponent)new Vue({render: h => h(App)
    }).$mount('#app')
    

    在任意组件中可直接使用:

    <FooterComponent />
    
3. 组件样式隔离

通过scoped属性实现组件样式私有化:

<style scoped>
/* 该样式仅作用于当前组件 */
.button {background-color: #42b983;
}
</style>

若需使用 CSS Modules:

<style module>
/* 生成类名如 .button_1d823ab */
.button {color: white;
}
</style>

在模板中使用:

<button :class="$style.button">按钮</button>
四、组件间通信机制
1. 父传子(Props)
  • 父组件传递数据:

    <ChildComponent :title="pageTitle" :is-active="true" />
    
  • 子组件接收 Props:

    export default {props: {title: String,isActive: {type: Boolean,default: false},// 数组/对象类型的默认值需返回函数initialData: {type: Object,default() {return { count: 0 }}}}
    }
    
2. 子传父(自定义事件)
  • 子组件触发事件:

    methods: {sendDataToParent() {const data = { message: '子组件数据' }this.$emit('child-event', data)}
    }
    
  • 父组件监听事件:

    <ChildComponent @child-event="handleChildData" />
    
    methods: {handleChildData(data) {console.log('接收到子组件数据:', data)}
    }
    
3. 非父子组件通信(事件总线)
  • 创建事件总线(EventBus.js):

    import Vue from 'vue'
    export default new Vue()
    
  • 发送数据组件:

    import EventBus from '@/utils/EventBus'methods: {sendToOtherComponent() {EventBus.$emit('custom-event', { data: '跨组件数据' })}
    }
    
  • 接收数据组件:

    import EventBus from '@/utils/EventBus'created() {this.eventHandler = (data) => {console.log('接收到跨组件数据:', data)}EventBus.$on('custom-event', this.eventHandler)
    },
    beforeDestroy() {// 销毁时移除监听,避免内存泄漏EventBus.$off('custom-event', this.eventHandler)
    }
    
五、组件引用与 Ref

通过ref获取 DOM 元素或子组件实例:

<template><div><!-- 引用DOM元素 --><input ref="inputElement" type="text"><!-- 引用子组件 --><ChildComponent ref="childComponent" /><button @click="focusInput">聚焦输入框</button></div>
</template><script>
export default {methods: {focusInput() {// 获取DOM元素并调用方法this.$refs.inputElement.focus()// 调用子组件方法this.$refs.childComponent.doSomething()}}
}
</script>

注意$refs在组件挂载后(mounted 钩子)才能正确获取,动态生成的 ref(如 v-for)会返回数组。

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

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

相关文章

虚幻基础:函数的返回节点

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录函数的返回节点&#xff1a;返回执行后的值返回执行后的值若不执行第一次 返回参数的默认值第二次 返回上一次执行值示例函数的返回节点&#xff1a;返回执行后的值 返回执行后的值 若不执行 第一次 返回参数的默…

FFmpeg 升级指北

近期我参与了部门底层库依赖的 FFmpeg 从 3.4 升级至 7.0.2 的工作&#xff0c;在此分享一些经验和遇到的 API 变动。 将 FFmpeg 升级到高版本后&#xff0c;编译过程中遇到大量报错是常态。这些错误通常源于 API 接口变更或结构体字段调整。此时不必惊慌&#xff0c;核心解决…

RISCV Linux 虚拟内存精讲系列三 -- setup_vm()

在 Linux 使用虚拟地址前&#xff0c;需要先配置页表&#xff0c;这就是 setup_vm() 的作用。然而&#xff0c;Linux 的页表配置&#xff0c;并不是一次过完成的&#xff0c;分了两个阶段&#xff0c;如下&#xff1a;在 setup_vm() 中&#xff0c;主要初始化了&#xff1a;1. …

创客匠人:解析创始人 IP 打造的底层逻辑与知识变现路径

在数字经济时代&#xff0c;创始人 IP 的价值被不断放大&#xff0c;而知识变现作为 IP 商业闭环的核心环节&#xff0c;正成为无数创业者探索的方向。创客匠人深耕知识付费领域多年&#xff0c;见证了大量创始人从 0 到 1 打造 IP 并实现变现的全过程&#xff0c;其背后的逻辑…

Visual Studio 2022 MFC Dialog 添加Toolbar及Tips提示

主要步骤&#xff1a;在主框架类中添加消息处理函数声明在 OnCreate 函数中启用工具栏提示在消息映射中注册 TTN_NEEDTEXT 消息使用 OnToolTipText 函数实现自定义提示文本1.在主程序的.h文件中加入afx_msg BOOL OnToolTipText(UINT id, NMHDR* pNMHDR, LRESULT* pResult); 2.在…

2025Q2大模型更新汇总(大语言模型篇)

摘要 2025年Q2大语言模型更新汇总&#xff1a; Qwen3&#xff0c;Deepseek-R1-0528&#xff0c;Doubao-Seed-1.6, MiniMax-M1, GPT4.1/O3/O4&#xff0c;Claude4/Gemini2.5 Qwen3 • 开源MOE模型&#xff0c; • MOE模型&#xff1a;Qwen3-235B-A22B&#xff0c;Qwen3-30B-…

【STM32】定时器中断 + 含常用寄存器和库函数配置(提供完整实例代码)

通用定时器基础知识 参考资料:STM32F1xx官方资料:《STM32中文参考手册V10》-第14章通用定时器 通用定时器工作过程: 时钟选择 计数器时钟可以由下列时钟源提供: ① 内部时钟(CK_INT) ② 外部时钟模式1:外部输入脚(TIx) ③ 外部时钟模式2:外部触发输入(ETR) ④ 内部触…

集群Redis

文章目录前言一、Redis主从复制配置1.1.配置文件redis_master.conf,redis_slave.conf1.2.启动服务1.3.检查成果二、Redis集群配置2.1.服务器40.240.34.91集群配置2.2.其它服务器xxx.92,xxx.93集群配置2.3.启动服务2.3.启动集群服务2.4.检查成果三、优劣四、结束前言 提示&…

ORA-600 kokiasg1故障分析---惜分飞

故障总结:客户正常关闭数据库,然后启动报ORA-600 kokiasg1错误,通过对启动分析确认是由于IDGEN1$序列丢失导致,修复该故障之后,数据库启动成功,但是后台大量报ORA-600 12803,ORA-600 15264等错误,业务用户无法登录.经过深入分析,发现数据库字典obj$中所有核心字典的序列全部被删…

[RPA] 影刀RPA基本知识

1.应用的构成一个应用&#xff1a;由多条指令叠加组成一条指令代表了一个操作动作许多条指令按照一定的逻辑关系编排起来&#xff0c;就构成了一个应用(这里的应用可理解为软件机器人RPA)一个应用 多个自动化指令的集合 2. 指令的一般构成在XXX对象上&#xff0c;对XXX元素执行…

pytest中测试特定接口

在pytest中只测试特定接口有以下几种常用方法&#xff1a; 1. 通过测试函数名精确匹配 直接指定测试文件和函数名&#xff1a; pytest test_api.py::test_upload_image_with_library这将只运行test_api.py文件中名为test_upload_image_with_library的测试函数。 2. 使用关键字匹…

HMI图形渲染优化:OpenGL ES与Vulkan的性能对比实战

HMI 图形渲染优化&#xff1a;OpenGL ES 与 Vulkan 的性能对比实战**摘要想让 HMI 界面的图形渲染又快又流畅&#xff0c;却在 OpenGL ES 和 Vulkan 之间纠结不已&#xff01;用 OpenGL ES&#xff0c;担心性能不够强劲&#xff0c;无法满足复杂场景需求&#xff1b;选 Vulkan&…

Python数据分析基础01:描述性统计分析

下一篇&#xff1a; 《Python数据分析基础04&#xff1a;预测性数据分析》 《Python数据分析基础03&#xff1a;探索性数据分析》 《python数据分析基础02&#xff1a;数据可视化分析》 《Python数据分析基础01&#xff1a;描述性统计分析》 描述性统计分析是统计学中最基…

成员不更新项目进度,如何建立进度更新机制

项目成员不及时更新进度的主要原因包括责任不明确、缺乏更新规则、沟通机制不畅、进度意识薄弱、工具使用不当等。其中尤其需要关注的是建立清晰的进度更新规则。明确规定成员应何时、如何、向谁汇报进度情况&#xff0c;使得项目的每项任务都有责任人和明确的更新频率及形式&a…

JVM 整体架构详解:线程私有与线程共享内存区域划分

Java 虚拟机&#xff08;JVM&#xff09;作为 Java 程序运行的基础&#xff0c;其内存模型和线程结构设计直接影响着程序的执行效率和稳定性。本文将从 线程是否共享 的角度出发&#xff0c;对 JVM 的整体内存结构进行清晰分类与简明解析。一、JVM 内存区域划分概览 根据是否被…

【Linux庖丁解牛】— 库的理解与加载!

1. 目标文件编译和链接这两个步骤&#xff0c;在Windows下被我们的IDE封装的很完美&#xff0c;我们⼀般都是⼀键构建⾮常⽅便&#xff0c; 但⼀旦遇到错误的时候呢&#xff0c;尤其是链接相关的错误&#xff0c;很多⼈就束⼿⽆策了。在Linux下&#xff0c;我们之前也学 习过如…

QML事件处理:鼠标、拖拽与键盘事件

在QML应用开发中&#xff0c;用户交互是构建动态界面的核心。本文将全面解析QML中的三大交互事件&#xff1a;鼠标事件、拖拽事件和键盘事件&#xff0c;通过实际代码示例展示如何实现丰富的用户交互体验。一、鼠标事件处理1. MouseArea基础MouseArea是QML中处理鼠标交互的核心…

MySQL 8.0 OCP 1Z0-908 题目解析(20)

题目77 Choose the best answer. Which step or set of steps can be used to rotate the error log? ○ A) Execute SET GLOBAL max_error_count . ○ B) Rename the error log file on disk, and then execute FLUSH ERROR LOGS. ○ C) Execute SET GLOBAL log_error ‘’…

八股学习(四)---MySQL

一、MySQL如何进行SQL调优&#xff1f;我的回答&#xff1a;面试官好&#xff01;我想从SQL语句本身和数据库结构两方面来做MySQL的SQL调优。首先会优化SQL写法&#xff0c;比如避免用SELECT *、减少子查询嵌套&#xff0c;用JOIN代替&#xff0c;还有合理使用索引&#xff0c;…

华中科大首创DNN衍射量子芯片登《Science Advances》:3D打印实现160μm³高维逻辑门

01 前言华中科技大学王健/刘骏团队在《Science Advances》发表突破性研究&#xff0c;利用飞秒激光三维打印技术&#xff0c;制造出全球首个聚合物基超紧凑高维量子光芯片。该芯片仅160微米见方&#xff08;约头发丝直径的1.5倍&#xff09;&#xff0c;却实现了光子空间模式的…