阶段一:基础前端知识
1. HTML/CSS/JavaScript基础
HTML5常用语义化标签:
<article>
标签定义独立的内容。 标签定义的内容本身必须是有意义的且必须是独立于文档的其余部分。
html
<html>
<head>
<meta charset="utf-8">
<title>演示</title>
</head>
<body>
<article>
<h1>Internet Explorer 9</h1>
<p> Windows Internet Explorer 9(缩写为 IE9 )在2011年3月14日21:00 发布。</p>
</article>
</body>
</html>

<header>
标签定义文档或者文档的一部分区域的页眉。
<header> 元素应该作为介绍内容或者导航链接栏的容器。
在一个文档中,您可以定义多个 <header> 元素。
注释:<header> 标签不能被放在 <footer>、<address> 或者另一个 <header> 元素内部。
html
<article>
<header>
<h1>Internet Explorer 9</h1>
<p><time pubdate datetime="2011-03-15"></time></p>
</header>
<p> Windows Internet Explorer 9(缩写为 IE9 )是在2011年3月14日21:00发布的</p>
</article>

<nav>
标签定义导航链接的部分。
并不是所有的 HTML 文档都要使用到 <nav> 元素。<nav> 元素只是作为标注一个导航链接的区域。
在不同设备上(手机或者PC)可以制定导航链接是否显示,以适应不同屏幕的需求。
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>练习</title>
</head>
<body>
<nav>
<a href="/html/">HTML</a> |
<a href="/css/">CSS</a> |
<a href="/js/">JavaScript</a> |
<a href="/jquery/">jQuery</a>
</nav>
</body>
</html>
<main>
标签用于指定文档的主体内容。
<main> 标签中的内容在文档中是唯一的。它不应包含在文档中重复出现的内容,比如侧栏、导航栏、版权信息、站点标志或搜索表单。
注意在一个文档中,<main> 元素是唯一的,所以不能出现一个以上的 <main> 元素。<main> 元素不能是以下元素的后代:<article>、<aside>、<footer>、<header> 或 <nav>。
html
<!DOCTYPE html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>练习</title>
</head>
<body>
<main>
<h1>Web 浏览器</h1>
<p>Google Chrome、Firefox 以及 Internet Explorer 是目前最流行的浏览器。</p>
<article>
<h1>Google Chrome 浏览器</h1>
<p>Google Chrome 浏览器是由 Google 开发的一款免费的开源 web 浏览器,于 2008 年发布。</p>
</article>
<article>
<h1>Internet Explorer 浏览器</h1>
<p>Internet Explorer 浏览器由微软开发的一款免费的 web 浏览器,发布于 1995 年。</p>
</article>
<article>
<h1>Mozilla Firefox 浏览器</h1>
<p>Firefox 浏览器是一款来自 Mozilla 的免费开源 web 浏览器,发布于 2004 年。</p>
</article>
</main>
</body>
</html>
<section>
标签定义了文档的某个区域。比如章节、头部、底部或者文档的其他区域。
html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>练习</title>
</head>
<body>
<section>
<h1>WWF</h1>
<p>The World Wide Fund for Nature (WWF) is an international organization working on issues regarding the conservation, research and restoration of the environment, formerly named the World Wildlife Fund. WWF was founded in 1961.</p>
</section>
<section>
<h1>WWF's Panda symbol</h1>
<p>The Panda has become the symbol of WWF. The well-known panda logo of WWF originated from a panda named Chi Chi that was transferred from the Beijing Zoo to the London Zoo in the same year of the establishment of WWF.</p>
</section>
</body>
</html>
`<aside>`,
`<footer>`
标签的正确使用场景
HTML5新特性:`<video>`, `<audio>`, `<canvas>`, `<svg>`, `<progress>`, `<meter>`
表单新特性:`placeholder`, `required`, `pattern`, `autocomplete`
CSS3特性
Flexbox布局: - `display: flex`及相关属性
容器属性:`flex-direction`, `flex-wrap`, `justify-content`, `align-items`, `align-content`
项目属性:`flex-grow`, `flex-shrink`, `flex-basis`, `order`, `align-self`
Grid布局:
`display: grid`及相关属性
网格定义:`grid-template-columns`, `grid-template-rows`, `grid-template-areas`
网格间隙:`grid-gap`
项目放置:`grid-column`, `grid-row`
CSS3选择器:属性选择器, 伪类选择器, 伪元素选择器
CSS3动画:`@keyframes`, `animation`属性
CSS3过渡:`transition`属性
CSS3变换:`transform`属性
媒体查询:`@media`
变量:`--variable`
JavaScript ES6+语法
变量声明:`let`, `const`
let 声明的变量只在 let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变。
箭头函数:`() => {}`
模板字符串:`` `string ${variable}` ``
解构赋值:数组解构, 对象解构
扩展运算符:`...`
剩余参数:`function(...args)`
默认参数:`function(a = 1)`
增强的对象字面量:简写属性, 计算属性名, 方法简写
Promise:`new Promise()`, `then()`, `catch()`, `finally()`
async/await:异步函数
模块系统:`import`, `export`
类:`class`, `extends`, `super`
迭代器与生成器:`*`, `yield`
2. TypeScript基础
类型系统
-
基本类型:`number`, `string`, `boolean`, `null`, `undefined`, `symbol`, `bigint`
-
联合类型:`string | number`
-
交叉类型:`A & B`
-
类型断言:`as`, `<Type>`
-
类型守卫:`typeof`, `instanceof`, 自定义类型守卫
-
类型推断:TypeScript的自动类型推断
-
类型别名:`type`
-
接口:`interface`
-
泛型:`<T>`, 泛型约束, 泛型默认值
-
高级类型:
-
映射类型:`Record`, `Partial`, `Required`, `Pick`, `Omit`
-
条件类型:`T extends U ? X : Y`
-
工具类型:`ReturnType`, `Parameters`, `ConstructorParameters`
-
模块声明:`declare module`
-
命名空间:`namespace`
阶段二:Vue 3核心
1. Vue 3基础 组件基础
-
组件定义:`defineComponent`
-
组件注册:全局注册, 局部注册
-
组件通信:Props, Emits
-
组件生命周期:`onMounted`, `onUnmounted`, `onUpdated`, `onBeforeMount`, `onBeforeUpdate`, `onBeforeUnmount`
-
组件样式:`scoped`样式, 深度选择器
模板语法
-
插值:`{{ }}`
-
指令:`v-if`, `v-else`, `v-else-if`, `v-for`, `v-show`, `v-bind`, `v-on`, `v-model`, `v-slot`
-
计算属性:`computed`
-
侦听器:`watch`, `watchEffect`
-
过滤器:已废弃,使用计算属性替代
响应式系统
-
`ref`:基本类型响应式
-
`reactive`:对象类型响应式
-
`readonly`:只读响应式
-
`shallowRef`/`shallowReactive`:浅响应式
-
`toRef`/`toRefs`:将响应式对象的属性转换为ref
-
`isRef`/`isReactive`/`isReadonly`:响应式判断
-
`unref`:获取ref的值
-
响应式原理:Proxy实现
生命周期钩子
-
选项式API生命周期:`beforeCreate`, `created`, `beforeMount`, `mounted`, `beforeUpdate`, `updated`, `beforeUnmount`, `unmounted`
-
组合式API生命周期:`onBeforeMount`, `onMounted`, `onBeforeUpdate`, `onUpdated`, `onBeforeUnmount`, `onUnmounted`, `onErrorCaptured`, `onRenderTracked`, `onRenderTriggered`
2. Vue 3进阶
组合式API
-
`setup()`函数:组合式API的入口
-
`ref`和`reactive`的使用
-
`computed`和`watch`的使用
-
`provide`/`inject`:依赖注入
-
`readonly`:创建只读代理
-
`watchEffect`:自动追踪依赖的副作用
-
`computed`:计算属性
-
`ref`和`reactive`的转换:`toRef`, `toRefs`, `unref`
自定义钩子
-
自定义钩子的定义:`useXxx`命名规范
-
钩子的复用:提取逻辑到自定义钩子
-
常见自定义钩子:`useCounter`, `useApi`, `useLocalStorage`等
组件通信
-
Props/Emits:父子组件通信
-
`provide`/`inject`:跨组件通信
-
事件总线:`mitt`库
-
Pinia:全局状态管理
-
插槽:默认插槽, 具名插槽, 作用域插槽
插槽和动态组件
-
插槽:`v-slot`, `#default`, `#name`
-
作用域插槽:向插槽传递数据
-
动态组件:`component :is`
-
异步组件:`defineAsyncComponent`
阶段三:生态系统
1. Vue Router
路由配置
-
路由定义:`createRouter`, `createWebHistory`
-
路由配置:`path`, `name`, `component`, `props`
-
嵌套路由:`children`
-
动态路由:`path: '/user/:id'`
-
路由别名:`alias`
-
路由重定向:`redirect`
导航守卫
-
全局守卫:`beforeEach`, `beforeResolve`, `afterEach`
-
路由守卫:`beforeEnter`
-
组件守卫:`beforeRouteEnter`, `beforeRouteUpdate`, `beforeRouteLeave`
-
守卫的参数和next函数
路由懒加载
-
动态导入:`() => import('@/views/Page.vue')`
-
路由分块:webpackChunkName
-
预加载:`router.preload()`
2. Pinia
状态管理
-
Store定义:`defineStore`
-
State:状态定义和访问
-
Getters:计算属性
-
Actions:异步操作
-
模块化:多个Store
Store设计
-
单一状态树:集中管理状态
-
模块化:按功能划分Store
-
命名规范:`useXxxStore`
-
状态持久化:localStorage
模块化
-
模块拆分:按业务逻辑拆分
-
模块组合:跨模块访问
-
模块命名空间:避免命名冲突
3. Element Plus
组件使用
-
基础组件:Button, Input, Select, Radio, Checkbox
-
容器组件:Container, Header, Aside, Main, Footer
-
表单组件:Form, FormItem, Input, Select, DatePicker
-
表格组件:Table, TableColumn, Pagination
-
对话框组件:Dialog, MessageBox, Message
-
导航组件:Menu, Tabs, Breadcrumb
-
数据展示:Card, Badge, Avatar, Tag
-
其他组件:Upload, Tree, Carousel, Collapse
表单验证
-
内置验证规则:`required`, `email`, `url`, `number`
-
自定义验证规则:`validator`
-
表单验证触发:`blur`, `change`, `submit`
-
表单验证方法:`validate`, `resetFields`
主题定制
-
主题变量:`--el-color-primary`, `--el-color-success`等
-
主题配置:`element-plus/dist/index.css`
-
按需引入:`unplugin-vue-components`
-
自定义主题:通过SCSS变量覆盖
阶段四:网络和构建
1. Axios
基础请求
-
`axios.get()`:GET请求
-
`axios.post()`:POST请求
-
`axios.put()`:PUT请求
-
`axios.delete()`:DELETE请求
-
请求参数:`params`, `data`
-
请求头:`headers`
拦截器
-
请求拦截器:`axios.interceptors.request.use()`
-
响应拦截器:`axios.interceptors.response.use()`
-
拦截器的应用:添加认证信息, 统一错误处理
错误处理
-
错误捕获:`try/catch`, `catch()`
-
错误类型:网络错误, 服务器错误, 业务错误
-
错误处理策略:重试机制, 错误提示
2. Vite
项目搭建
-
初始化项目:`npm create vite@latest`
-
项目结构:`src`, `public`, `index.html`
-
配置文件:`vite.config.js`
-
开发服务器:`npm run dev`
配置优化
-
别名配置:`resolve.alias`
-
插件配置:`plugins`
-
构建配置:`build`
-
开发服务器配置:`server`
-
环境变量:`.env`文件
构建部署
-
构建命令:`npm run build`
-
构建产物:`dist`目录
-
静态资源处理:`public`目录
-
部署策略:CDN, 服务器部署
阶段五:实战项目
1. 项目结构
-
目录结构:`src/api`, `src/components`, `src/views`, `src/router`, `src/store`
-
命名规范:组件名, 文件名, 变量名
-
代码风格:ESLint, Prettier
-
模块化:按功能划分模块
2. API集成
-
API封装:统一API调用方法
-
接口文档:Swagger, Postman
-
数据模型:TypeScript接口定义
-
错误处理:统一错误处理
-
认证授权:Token管理
3. 性能优化
-
代码分割:动态导入
-
懒加载:图片懒加载, 组件懒加载
-
缓存策略:浏览器缓存, 本地存储
-
首屏优化:SSR, 预渲染
-
网络优化:HTTP/2, CDN
4. 测试
-
单元测试:Jest, Vitest
-
组件测试:Vue Test Utils
-
端到端测试:Cypress, Playwright
-
测试覆盖率:`coverage`
-
测试策略:TDD, BDD
学习建议
-
**系统性学习**:按照上述知识点顺序,系统学习每个技术点
-
**实践为主**:每学习一个知识点,立即动手实践
-
**项目驱动**:通过实际项目巩固所学知识
-
**代码阅读**:分析优秀开源项目的代码结构
-
**调试技巧**:学习使用浏览器开发者工具
-
**文档查阅**:养成查阅官方文档的习惯
-
**社区参与**:加入技术社区,交流学习经验
-
**持续更新**:关注前端技术的最新发展
通过系统性学习这些知识点,你将能够掌握现代前端开发的核心技能,为成为一名优秀的前端开发者打下坚实的基础。