作者:mobiledu2502927537 | 来源:互联网 | 2023-08-26 23:26
Vue 基础
基础
- 声明式渲染:el, data, methods, components。定义 template 然后挂载到 index.html 中的某个模块上
- MVVM 模型:双向绑定
- 生命周期:beforeCreate, created, beforeMount, mounted, beforeUpdate, updated, beforeDestroy, destroyed
模版语法
- mustache,computed,watch 属性(监听 route)
- v-once, text, pre, cloak
- v-for: 给 DOM 元素添加 key
- 数组:(item, index) in myList
- 对象:(value, key, index) in myItem
- v-bind: 单向绑定属性
- 属性:src, value, name, title, class, href, style, id
- 动态变样式!绑定 class
- v-on: 绑定事件监听
- click: stop, prevent, native, once
- keyup/keydown: enter...
- v-if (else if, else) && v-show
- v-model: 双向绑定
- 等于 v-bind + v-on (比如:value + :input)
- 应用元素:input, mustache, radio(相同 value 互斥),checkbox, select & option
- 修饰符:lazy, number, trim
Vue 的组件化开发
- data 必须是函数:有自己独立的作用域
父子组件通信
父 --> 子
- props
- children(子组件数组)
- ref
子 --> 父
- 事件监听:
- 子定义:this.$emit('自定义事件名字', 其他参数)
- 父中子:v-on 绑定=‘自定义事件名字’
- parent
- root
v-slot 插槽
- 插槽默认值
- 具名插槽:name 对应上
- 作用域插槽:数据来自子组件,父组件重新进行排版(template + slot-scope="mychildslot") + mychildslot.myPropName
Webpack + Vue CLI 脚手架
Webpack 基础
- 静态模块打包:处理依赖关系,用 loader 将文件转换成浏览器可识别文件。除了JS以外,图片等文件也可以被当成模块来使用
- 使用:依赖 node 环境。 npm init: package.json 管理 package name, versionn, description, entry point, script 运行脚本, devDependencies, dependencies
- 文件配置打包出入口
- 使用vue:npm install vue。module 中配置 resolve extensions & alias
Webpack loader
- css
- less
- 图片:url-loader, file-loader
- babel: 处理 ES6 语法
Webpack Plugin
Webpack-dev-server
- 本地开发服务器,基于 node.js 服务器搭建
- module.exports 的 dev 对象中配置端口等信息
Webpack 配置文件: base 都会被 merge 到 dev 和 prod 中
- base.config.js
- dev
- prod
Vue CLI
CLI 3.0 配置,提供 vue ui命令,提供可视化配置
项目目录结构
- build
- config
- node_modules
- src
- static
- .babelrc
- .editorconfig
- .eslintignore
- .gitignore
- ./postcssrc
- index.html
- package.json
- package-lock.json
- README.mD
Runtime+compiler vs. Runtime-only
- Vue 程序运行过程:template —> AST —> render —> Virtual DOM —> UI
- runtime-only 直接 render 成 virtual DOM,没有转换 AST 步骤,效率更高
Vue Router
路由基本知识
- 公网 & 内网 IP
- 路由过程:内容 + IP地址 —> 猫 —> 路由器通过映射表(内网IP和电脑MAC地址的对照表)再次转发消息
- url 的 hash & HTML5 的 history
- pushState(data, title, url)
- history.back/forward/go/replaceState
前后端渲染 & 路由:后端渲染 --> (Ajax)前后端分离 --> SPA 前端路由
Vue-Router 基础
- router-link (to, tag, replace, (自定义)active class) + router-view
- 代码跳转:this.$router.push/replace
动态路由
- /user/:uid
- this.$route.params.uid
路由懒加载:
- 只请求 & 加载当前会用到的资源
- const myCpn = () => import('component Path')
其他
- 嵌套路由:children
- 路由传参:params, query
- 全局导航守卫:beforeEach (to, from, next), afterEach...
- Keep-alive
Javascript ES6 语法
- 模块化开发:
- Common JS:
- module.exports = {...}
- const blablabla = require('myPath')
- ES6:
- export (default)...
- import ... from ...
- Promise: 异步操作管理
Vuex:状态管理工具
- 过程:Vue components —> dispatch —> actions —> commit —> mutations —> modules —> state —> render —> Vue components
- state: 存储状态
- getters: vuex 的 computed
- mutations: 定义改变 state 的方法,使用时要 commit
- actions: 专门处理异步操作,使用时先 dispatch 到 actions,然后 actions 在 commit mutations 方法/事件
- modules: 拥有独立的 state, getter, mutation, action 的模块
Axios 网络请求封装框架
- get/post,普通请求
- 发送并发请求:
- axios.all([axios数组])
- axios.spread((res1, res2) => { ...... })
- 全局配置:defaults: url, method, baseURL, headers, timeout...
- 创建 Axios 实例:不同的实例有不同的配置
- 封装:返回一个函数,返回 Promise 对象,其中创建 axios 实例&用传进来的 config 发送请求,返回 Promise 对象。外部正常 then & catch
- 拦截器:
- request 请求拦截:
- 添加特殊的 header(比如language)
- 开启 loading
- 判断请求是否满足后端需求(比如看是否有token:登陆状态)
- response 拦截:
- 后端返回的登陆状态:按需跳转登陆页面
- 关闭 loading