还剩28页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
框架培训课件Vue框架简介VueVue框架由华人开发者尤雨溪(Evan You)于2014年创建,是一款用于构建用户界面的渐进式JavaScript框架Vue
3.x版本于2020年9月正式发布,带来了显著的性能提升和新特性作为开源项目,Vue在GitHub上已获得超过21万颗星,拥有庞大而活跃的开发者社区支持,成为前端开发领域的主流技术栈之一为什么选择?Vue学习曲线平缓轻量级框架相比其他前端框架,Vue提供了更友好的学习体验,开发者可以逐步Vue核心库压缩后仅约33KB,加载迅速,对性能影响小,特别适合采用其特性,降低入门门槛,使新手能够快速上手对性能要求较高的应用场景双向数据绑定与响应式企业广泛采用UIVue的响应式系统能够自动追踪依赖关系,在数据变化时高效更新DOM,简化开发流程,提升用户体验的核心理念Vue渐进式架构Vue的设计采用渐进式架构,允许开发者根据项目需求逐步采用其功能您可以仅使用核心视图层,也可以引入更多生态系统工具构建完整应用数据驱动视图Vue采用数据驱动的开发方式,开发者只需关注数据模型的变化,框架会自动处理DOM更新,简化UI操作逻辑组件化开发应用场景Vue嵌入式模块Vue的轻量级特性使其成为嵌入传统网站的理移动端应用想选择,可用于开发独立功能模块,与现有系单页应用()与管理后台SPA统无缝集成Vue可用于开发响应式移动端WebApp,也可Vue非常适合构建复杂的单页应用和企业级管作为小程序的开发框架(如uni-app),提供理后台系统,结合Vue Router和Vuex可实现统一的开发体验高效的状态管理和路由控制开发环境准备安装包管理器安装Node.js使用npm(自带)或安装Yarn作为包管理工具npm install-g yarn访问Node.js官方网站下载并安装最新的LTS版本(推荐
16.x及以这些工具将帮助您管理项目依赖,提高开发效率上)Node.js包含npm包管理器,是Vue项目开发的基础环境验证安装node-v和npm-v安装Vue CLI配置编辑器全局安装Vue命令行工具npm install-g@vue/cli推荐使用Visual StudioCode作为IDE,并安装以下插件CLI提供项目脚手架功能,帮助快速创建标准化的Vue项目•Volar(Vue3)或Vetur(Vue2)•ESLint、Prettier第一个项目实践Vue让我们通过命令行创建并启动第一个Vue项目,体验Vue开发的基本流程打开终端,使用Vue CLI创建新项目vue createhello-vue-app
2.在提示中选择Vue版本(Vue2或Vue3)和项目配置进入项目目录cd hello-vue-app启动开发服务器npm runserve
5.在浏览器中访问localhost:8080查看项目运行效果项目启动后,您可以实时编辑代码并查看变化,体验Vue的热重载特性Vue CLI创建项目的命令行界面项目结构解析Vuemain.js应用的入口文件,负责创建Vue实例并挂载到DOM这里可以引入全局组件、插件和配置全局选项import{createApp}from vueimportApp from./App.vuecreateAppApp.mount#appApp.vue应用的根组件,通常包含应用的整体布局和全局导航所有页面内容都渲染在这个组件内部components/存放可复用的组件文件,按功能或特性组织推荐采用PascalCase命名组件文件,如HeaderNav.vue与assets/public/assets/存放需要webpack处理的资源;public/存放不需处理的静态资源,可通过绝对路径引用模板语法Vue使用基于HTML的模板语法,允许开发者声明式地将DOM绑定到底层组件实例的数据所有Vue模板都是合法的HTML,可以被符合规范的浏览器和HTML解析器解析基本语法示例{{message}}现在你看到我了•{{item.text}}响应式数据系统Vue的核心特性之一是其响应式数据系统,它能够自动跟踪依赖关系并在数据变化时更新DOM数据声明实现Proxy在Vue3中,可以通过data选项函数返回一个对象来声明组Vue3使用ES6Proxy作为其响应式系统的基础,提供了更件的响应式状态全面的响应式覆盖和更好的性能•可以检测对象属性的添加和删除export default{data{return•可以检测数组索引和长度的变更{count:0,message:你好,•支持Map、Set、WeakMap和WeakSetVue!}}}自动更新当响应式数据发生变化时,所有依赖该数据的视图会自动更新methods:{increment{//修改数据后视图自动更新this.count++}}常用指令详解v-bind v-on动态绑定一个或多个属性,简写为冒号(:)绑定事件监听器,简写为@符号鼠标悬停鼠标悬停v-if/v-else/v-show v-for条件性渲染元素,v-if销毁/创建元素,v-show切换display基于数据多次渲染元素或模板AB•{{index}}-{{item.name}}Not A/B显示/隐藏Vue指令是带有v-前缀的特殊属性,当表达式的值改变时,将响应式地作用于DOM每个指令都有特定的功能,帮助开发者以声明式方式处理DOM操作事件与方法Vue提供了完善的事件处理系统,允许我们监听DOM事件并在触发时运行JavaScript代码事件修饰符事件处理基础Vue提供了事件修饰符来处理DOM事件细节,无需在方法中手动处理.stop-阻止事件冒泡.prevent-阻止默认行为.capture-使用事件捕获模式.self-只当事件在该元素本身触发时.once-事件只触发一次.passive-不阻止默认行为方法定义methods:{greet{alert你好,+this.name},saymessage{alertmessage},warnmessage,event{if eventevent.preventDefaultalertmessage}}表单与双向绑定Vue的v-model指令提供了便捷的双向数据绑定,特别适用于表单元素,能够同时监听用户输入事件并更新数据模型请选择A BC修饰符v-model.lazy-在change事件后同步,非input.number-自动将输入转为数字.trim-自动去除首尾空格自定义组件的v-modelVue3中,自定义组件可以通过modelValue prop和update:modelValue事件实现v-model计算属性与侦听器计算属性()侦听器()Computed Watch计算属性用于处理复杂逻辑,它具有缓存机制,只有在依赖发生变化时才会重新计算侦听器用于监听特定数据变化并执行异步或开销较大的操作computed:{//计算属性的getter fullName{return this.firstName++this.lastName},//带setter的计算属性watch:{//监听简单属性questionnewValue,oldValue{this.fetchAnswer},//深度监听对象userProfile:fullNameWithSetter:{get{return this.firstName++this.lastName},setnewValue{const names{handlernewValue{this.saveToLocalStorage},deep:true},//立即执行user.name:=newValue.splitthis.firstName=names
[0]this.lastName=names
[1]}}}{handlernewValue{this.validateName},immediate:true}}计算属性vs侦听器计算属性用于依赖其他属性计算值,有缓存机制,适合同步逻辑侦听器用于监听特定数据变化并执行副作用,适合异步操作、复杂逻辑和第三方集成大多数情况下,计算属性更适合用于派生状态;而侦听器则更适合在数据变化时执行特定的、可能异步的操作组件化开发基础组件是Vue的核心概念,它们是可复用的Vue实例,拥有自己的模板、逻辑和样式组件化开发允许我们将界面拆分为独立可维护的部分单文件组件()SFCVue推荐使用.vue文件格式的单文件组件,它包含三个部分template-HTML模板script-JavaScript逻辑style-CSS样式(可选择scoped限制作用域)组件注册组件可以全局注册或局部注册//全局注册app.componentmy-component,{/*组件选项*/}//局部注册exportdefault{components:{my-component:MyComponent}}组件嵌套与组合组件可以无限嵌套,形成组件树结构一个常见的组件结构可能包括•根组件(App.vue)•布局组件(Layout.vue)•页面组件(Home.vue,About.vue)•通用UI组件(Button.vue,Card.vue)•业务功能组件(ProductList.vue)遵循单一职责原则,每个组件应该只负责一个功能或UI部分,这样有利于组件的复用和维护组件注册与通信父组件向子组件传递数据Propsexport default{props:{message:{type:String,required:true,default:默认消息}}}事件子组件向父组件通信自定义v-modelexport default{props:[modelValue],emits:[update:modelValue],methods:{updateValuee{this.$emitupdate:modelValue,e.target.value}}}跨层级通信Provide/Inject生命周期钩子Vue组件有一系列的生命周期钩子,允许我们在特定阶段执行自定义代码创建阶段beforeCreate实例初始化之后,数据观测和事件配置之前created实例创建完成,可访问数据,但尚未挂载DOM挂载阶段beforeMount挂载开始之前调用mounted实例挂载完成,可访问DOM元素更新阶段beforeUpdate数据更新但DOM更新前updated DOM更新完成后卸载阶段beforeUnmount实例卸载前unmounted实例卸载完成常见应用场景created发起API请求、添加事件监听mounted访问DOM元素、初始化第三方库beforeUnmount清除定时器、解绑事件监听插槽与内容分发插槽(Slot)是Vue的一个强大特性,允许组件接收并渲染来自父组件的内容,实现更灵活的内容分发基本插槽用法自定义按钮文本具名插槽作用域插槽当需要多个插槽时,可以使用具名插槽来标识作用域插槽允许子组件向父组件传递数据,让父组件决定如何渲染主要内容•{{user.name}}插槽系统使组件更加灵活,适用于创建高度可定制的组件库和UI框架组合式()API Vue3Vue3引入了组合式API(Composition API),它提供了一种基于函数的方式来组织组件逻辑,解决了选项式API在大型组件中逻辑分散的问题响应式API函数setuprefsetup是组合式API的入口点,它在组件实例创建之前执行用于创建单一值的响应式引用const count=ref0//访问值需要.valueconst name=ref张三console.logcount.value//0reactive用于创建响应式对象const state=reactive{count:0,name:张三}console.logstate.count//0自定义Hooks组合式API的一个主要优势是能够将相关逻辑抽取为可复用的函数(Hooks)//useCounter.jsimport{ref}from vueexportfunction useCounter{const count=ref0function increment{count.value++}return{count,increment}}//在组件中使用import{useCounter}from./useCounterexportdefault{setup{const{count,increment}=useCounter return{count,increment}}}路由管理Vue Router基本配置路由导航//router/index.jsimport{createRouter,createWebHistory}from vue-routerimport Homefrom../views/Home.vueimport首页关于About from../views/About.vueconst routes=[{path:/,name:Home,component:Home},{path:/about,name:About,component:About}]const router=createRouter{history:createWebHistory,routes}export defaultrouter//main.jsimport routerfrom./routerapp.userouter动态路由与参数路由守卫//路由配置{path:/user/:id,name:User,component:User}//访问参数export default{computed:{userId//全局前置守卫router.beforeEachto,from,next={if to.meta.requiresAuth!isAuthenticated{next/login}{return this.$route.params.id}}}//组合式API中访问参数import{useRoute}from vue-routerexport defaultelse{next}}//路由独享守卫{path:/admin,component:Admin,beforeEnter:to,from,next={if isAdmin{setup{const route=useRoute console.logroute.params.id}}{next}else{next/403}}}//组件内守卫export default{beforeRouteEnterto,from,next{nextvm={//通过vm访问组件实例}}}状态管理VuexVuex是Vue的官方状态管理库,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化的核心概念VuexState单一状态树,作为唯一数据源存储应用层级的状态Getter从store中派生出的状态,类似于计算属性Mutation更改store中状态的唯一方法,必须是同步函数Action生态与工具链开发工具组件库状态管理UIVue CLI官方命令行工具,提供项目脚手架Element Plus基于Vue3的桌面端组件库Vuex Vue官方状态管理库Vite新一代前端构建工具,提供更快的开发服务器和构建速度Ant DesignVue企业级UI设计语言和Vue组件库Pinia下一代Vue状态管理库,更轻量、更TypeScript友好Vuetify MaterialDesign风格的Vue组件框架Vue DevTools浏览器扩展,用于调试Vue应用Vant有赞前端团队开源的移动端组件库Vuex ORM对象关系映射库,用于Vuex StoreVolarVS Code扩展,提供Vue3语法高亮和智能提示扩展与集成Vue Router官方路由管理器Axios基于Promise的HTTP客户端VueUse Vue组合式API工具集合Vue I18n国际化插件Vue Test Utils组件测试工具Nuxt.js Vue框架,简化SSR应用开发Quasar构建响应式网站、PWA、移动应用等Vue生态系统丰富而活跃,可以根据项目需求选择合适的工具和库,简化开发流程,提高开发效率单元测试与调试单元测试工具Vue DevToolsVue TestUtilsVue官方的组件测试工具库Jest JavaScript测试框架,支持快照测试Mocha灵活的JavaScript测试框架Cypress端到端测试框架Vitest Vite原生的单元测试框架组件测试示例//使用VueTestUtils测试一个组件import{mount}from@vue/test-utilsimport Counterfrom../Counter.vuetestincrements counterwhen buttonis clicked,async={const wrapper=mountCounter//验证初始文本expectwrapper.text.toContainCount:0//触发按钮点击事件await wrapper.findbutton.triggerclick//验证更新后的文本expectwrapper.text.toContainCount:1}Vue DevTools是一个浏览器扩展,提供了强大的调试功能•组件树浏览与检查•实时编辑组件状态•Vuex状态监控与时间旅行调试•性能分析•自定义事件监听•路由导航追踪其他调试技巧构建与部署构建生产版本使用Vue CLI或Vite构建优化的生产版本#Vue CLInpmrun build#Vitenpm runbuild构建过程会生成优化的静态文件,通常位于dist/目录下配置生产环境使用环境变量区分开发和生产环境//.env.productionVUE_APP_API_URL=https://api.example.com//在代码中使用const apiUrl=process.env.VUE_APP_API_URL部署策略静态托管Netlify,Vercel,GitHub Pages传统服务器将构建文件放在Nginx、Apache等Web服务器下容器化部署Docker+Kubernetes云平台AWS S3+CloudFront,阿里云OSS等配置示例Nginxserver{listen80;server_name example.com;root/var/www/vue-app/dist;index index.html;#处理SPA路由location/{try_files$uri$uri//index.html;}#静态资源缓存location/assets/{expires1y;add_header Cache-Control public;}}性能优化实战代码分割与懒加载虚拟列表优化性能指令使用减小初始加载体积,按需加载组件处理大数据列表时,只渲染可见区域的项目利用Vue提供的性能优化指令//路由懒加载const routes=[{path:/about,name:About,component:=import./views/About.vue}]//组件懒加载constAsyncComponent=defineAsyncComponent=import./components/Heavy.vue{{staticContent}}{{expensiveComputationitem}}其他优化策略合理使用v-show与v-if频繁切换使用v-show,条件变化少用v-if使用计算属性缓存避免在模板中放置复杂计算适当使用keep-alive缓存组件状态,避免重复渲染函数式组件对于无状态组件使用函数式组件压缩资源使用gzip/brotli压缩静态资源减少不必要的监听器合理使用watch,避免深度监听大对象企业级实战案例后台管理系统架构技术栈Vue3+TypeScript+Vite+Element Plus状态管理Pinia分模块管理权限控制基于角色的访问控制(RBAC)布局结构菜单侧边栏+顶部导航+内容区组件设计业务组件+通用组件分离移动端商城实现技术选型Vue3+Vant UI+Vite性能优化图片懒加载+路由预加载状态管理购物车+用户信息本地持久化体验优化骨架屏+下拉刷新+上拉加载支付集成微信支付、支付宝支付前后端协作模式接口规范RESTful API+OpenAPI/Swagger文档认证方式JWT令牌+Refresh Token数据交互Axios封装+统一响应处理Mock服务本地Mock+在线Mock平台集成部署流程CI/CD自动化构建与部署企业级应用开发需要考虑架构扩展性、可维护性、权限管理、性能优化等多方面因素通过模块化设计、组件封装和规范化开发流程,可以提高团队协作效率和项目质量常见问题汇总12父子组件通信问题路由刷新页面空白问题父组件传递的props未能在子组件中响应更新或类型校验失败问题部署后,直接访问非根路径或刷新页面出现404解决方案解决方案•确保props正确声明,包括类型和默认值•确保服务器配置正确处理SPA路由•检查传递的数据是否是响应式的•对于Nginx,添加try_files配置•对于对象和数组,注意引用传递问题•对于Apache,配置.htaccess文件•使用计算属性监听props变化•静态托管服务如Netlify,添加_redirects文件props:{user:{type:Object,required:true,validator:#Netlify_redirects/*/index.html200#Nginxlocation/{try_filesvalue=value.name!==undefined}}$uri$uri//index.html;}3依赖冲突排查问题升级依赖后项目启动失败或出现运行时错误解决方案•检查package.json中的依赖版本•查看错误日志,定位冲突依赖•尝试删除node_modules并重新安装•使用npm-check-updates检查可更新的包•逐个升级依赖进行测试,而非一次升级全部#安装依赖检查工具npm install-g npm-check-updates#检查可更新的依赖ncu#选择性更新ncu-u--target minor最佳实践建议项目目录结构规范代码风格与规范•使用ESLint+Prettier保证代码质量和一致性src/├──api/#API请求├──assets/#静态资源├──components/#通用组件│├──common/•采用约定式提交(Conventional Commits)规范#基础组件│└──business/#业务组件├──composables/#组合式函数├──config/#全局配置├──directives/#自定义指令├──hooks/#自定义hooks├──layouts/#布局组件├──router/•组件命名使用PascalCase,如UserProfile.vue#路由配置├──store/#状态管理├──styles/#全局样式├──utils/#工具函数└──•props命名使用camelCase,事件名使用kebab-caseviews/#页面组件•私有属性/方法添加下划线前缀,如_handlePrivate•单文件组件结构顺序template→script→style集成TypeScript使用TypeScript可以提高代码健壮性和开发体验//类型定义interface User{id:number;name:string;email:string;}//组件props类型defineProps{user:User;loading:boolean;}//发射事件类型const emit=defineEmits{e:update,id:number:void;e:delete:void;}响应式陷阱避免性能优化建议•避免直接修改props,应该通过事件通知父组件更新•对大列表使用虚拟滚动和分页•使用reactive时,不要解构其属性,会丢失响应性•合理使用v-once和v-memo减少不必要的重渲染•ref必须使用.value访问和修改其值•对于静态内容,使用静态提升(Vite/Webpack生产模式自动处理)•处理大型数据时,考虑使用shallowRef或shallowReactive•使用keep-alive缓存频繁切换的组件未来趋势与新特性新特性生态发展Vue
3.4•更高效的编译器优化•Pinia取代Vuex成为主流状态管理•改进的响应式系统•Nuxt3稳定发布,全栈应用开发增强•更好的TypeScript集成•组件库全面升级,UI框架生态繁荣•更小的包体积•开发工具完善,Volar提供更强IDE支持•defineModel语法糖简化双向绑定•第三方集成改进,跨框架兼容性增强1234性能提升前端工程化趋势•Vapor Mode:更小更快的运行时•构建工具向Vite迁移,开发体验大幅提升•更高效的模板编译•TypeScript成为标配,类型安全受到重视•框架内置延迟加载功能•微前端架构在大型应用中应用增多•SSR性能优化•Web Components标准与Vue集成深化•更好的Tree-shaking支持•低代码平台与Vue生态结合发展Vue框架不断发展,在保持易用性的同时提升性能和开发体验作为开发者,需要关注社区动态,学习新特性,同时保持对基础原理的深入理解,灵活应对不同项目需求总结与交流课程关键收获掌握Vue框架核心概念和工作原理,建立坚实的技术基础熟悉Vue生态系统和工具链,提高开发效率和代码质量通过实战案例,学习企业级应用开发的最佳实践掌握性能优化策略,构建高效、流畅的用户界面学习路径建议
1.夯实JavaScript基础知识持续学习资源
2.学习Vue核心概念与API
3.掌握Vue Router和Pinia/Vuex Vue官方文档:vuejs.org
4.实践小型项目,熟悉开发流程•Vue Mastery视频教程
5.学习TypeScript与Vue结合使用•Vue School在线课程
6.尝试更复杂的企业级应用开发•GitHub上的Vue开源项目
7.深入组件设计模式和性能优化•Vue社区论坛和Discord
8.参与开源项目,持续学习成长扫码加入技术交流群我们创建了Vue技术交流社区,欢迎加入讨论技术问题,分享开发经验可以通过扫描右侧二维码或搜索群号123456789加入。
个人认证
优秀文档
获得点赞 0