根据 B 站黑马程序员视频所撰写的笔记
Vue 基础
- JavaScript 框架
- 简化 Dom 操作
- 响应式数据驱动
提示:以下代码都要导入 Vue.js 文件
el: 挂载点
Vue 会管理 el 选项命中的元素及其内部的后代元素,建议使 id 选择器,可以使用其他双标签,但不能使用 html 和 body
data: 数据对象
methods: 方法
v-text
绑定显示文字,直接覆盖
v-html
绑定显示文字/渲染代码。
用途:将字符串 String 里的 HTML 代码渲染成网页
注意:在网站上动态渲染任意 HTML 是非常危险的,因为容易导致 XSS 攻击。只在可信内容上使用 v-html
,永远不要用在用户提交的内容上。
v-on | @
为元素绑定事件,指令可去掉v-on
简写为@
语法:@事件="方法([参数])"
文档传送门:https://cn.vuejs.org/v2/api/#v-on
v-show
组件的显隐效果,其原理是修改元素的样式 display,指令后的内容最终都会被解析为布尔值
用法:v-show
内可写true
、false
,也可以写表达式
场景:频繁切换的元素用 v-show
v-if
根据表达式的真假,切换元素有无效果,其原理是操纵 dom 元素
用法:和v-show
一毛一样
场景:不频繁切换的元素用v-if
频繁操作 dom 对性能消耗比较大
v-bind | :
为元素绑定属性(比如 :src,:title,:class),指令可去掉v-bind
简写为:
语法:v-bind:属性名=表达式
👉:属性名=表达式
v-for
根据数据生成列表结构
语法:(item,index) in 数组
场景:数组经常和v-for
结合使用
v-model
获取和设置表单元素的值(双向数据绑定),绑定的数据会和表单元素值相关联
双向数据绑定可以实现数据双向更改,而不是只能 data 里数据改{{}}
的
父组件传值给子组件
父传子主要通过在父组件 v-bind 绑定数据,在子组件进行用props
进行数据的接收
父组件:
子组件:
网络应用
axios
功能强大的网络请求库
导入 html:写入<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
导入 vue3.x:运行npm i axios -S
,在<script>
里写入import axios from 'axios';
语法:
-
get 请求:axios.get(网址?key=value&key2=value1).then(function(response){},function(err){})
-
post 请求:axios.post(网址,{key:value,key2:value1}).then(function(response){},function(err){})
Get和Post的区别是什么?
- Get 是不安全的,因为在传输过程,数据被放在请求的 URL 中;Post 的所有操作对用户来说都是不可见的。
- Get 传送的数据量较小,这主要是因为受 URL 长度限制;Post 传送的数据量较大,一般被默认为不受限制。
- Get 限制 Form 表单的数据集的值必须为 ASCII 字符;而 Post 支持整个 ISO10646 字符集。
- Get 执行效率却比 Post 方法好。Get 是 form 提交的默认方法。
文档传送门:https://github.com/axios/axios
ES6
什么是 ES6?
ECMAScript 6(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。Mozilla 公司将在这个标准的基础上,推出 JavaScript 2.0。ECMA Script,JavaScript 的语言标准。
优点:
提升 JS 编写大型的复杂应用程序的能力(这次升级加入了模块化的概念、细化和优化语法、封装了一些方法)
缺点:
对浏览器存在兼容性问题,可以使用 Bable:ES6->ES5(转换器)
let
和 var 关键字的用法基本一致,没有变量提升,建议用 let
变量提升就好比你先使用变量后定义,编译时会自动将变量定义那段代码上移
模板字符串
使用``
包裹文本,在需要替换的位置使用${}
占位,并填入内容即可
对象简化赋值
如果属性名和变量名相同,可以简写,方法可以省略 function 关键字
箭头函数
function 省略掉,替换为 =>
参数只有一个时,可以省略 ()
函数体只有一行时,可以省略 {}
函数体只有一行,并且有返回值时,如果省略了{}
,必须省略 return
箭头函数的 this
创建时的 this 是谁,运行的时候 this 就是谁
单文件组件
后缀名是 .vue ,可以同时编写结构,逻辑和样式
template
标签中写结构,例如div
script
标签中写逻辑
style
标签中写样式
快速原型开发
环境配置
安装 Node.js
全部使用默认的设置,一路下一步即可
打开命令行工具,输入命令 node –v
以及 npm -v
检查是否安装成功
通过命令 npm install -g @vue/cli-service-global
安装一个小工具
基本使用
保证 环境配置 成功之后,在 .vue
文件所在的路径下打开终端 输入 vue serve <FileName>
,等待解析,然后在浏览器访问出现的 地址 即可
注意:
-
template 中必须有一个根节点,比如div
-
script 中的 data
写成函数,内部返回一个对象
-
如果要使用写好的样式,直接 import
即可
vue-cli(脚手架)
帮你创建项目基本结构的工具,帮你整合了很多东西,我们不在需要自己一步一步的搭建这些了。
环境配置
保证 Node.js 安装成功的情况下,通过命令npm install -g @vue/cli
安装一个小工具
如果失败了:
先输入npm install -g cnpm
安装一个镜像下载工具(cnpm)
成功之后再输入cnpm install -g @vue/cli
通过刚刚安装的工具 来安装 vue-cli
项目创建及运行
在想要创建项目的文件夹下输入 vue create 项目名
,调整一下设置,然后回车。如果成功了,依次输入最后出现的 提示代码,稍等片刻,在浏览器中输入出现的 地址 即可访问。
如果有写好的项目,然后输入npm run serve
命令运行即可
文件结构
public:内含网站 icon 图标,页面模板 index
src:用来放网站绝大多数资源
- assets:静态资源,如:图片,CSS 文件
- componets:页面组件
- App.vue:顶级页面组件
vue-router
管理多个组件切换关系,用它可以做 SPA(Single Page Application 单页面应用)
安装
在项目的 根目录 打开终端,通过命令npm install vue-router
下载
用法:在main.js
中
-
导入
-
use 一下
-
创建路由
-
挂载到 Vue 实例上
配置规则
通过routes
属性配置地址和路由管理的组件关系
-
导入组件
-
routes 属性中进行配置关系
-
path:设置地址
-
component:设置组件
-
可以配置多个
路由出口
希望匹配到的组件显示在哪里,就在哪里设置一个router-view
标签
形如:<router-view></router-view>
声明式导航
通过 router-link
标签设置to
属性为地址 可以实现点击切换
形如:<router-link to="/XXX"></router-link>
编程式导航
组件中通过this.$router.push(地址)
可以通过代码实现切换,还可以this.$router.replace(地址)
表示页面不可返回
也可以直接@click="$router.push('/XXX')"
路由传参
在地址的后面 写上?
分隔
通过key=val1&key2=val2
的方式添加参数
组件中通过 this.$route.query
访问对应的 key 即可获取数据
Element-UI (Vue 3.x)
饿了么前端推出的 Vue 组件库,很多常用的功能已经写好了,可直接用。Element-UI 官方文档
安装
-
在项目的 根目录 打开终端,通过命令下载npm install element-plus --save
-
更改main.js
文件:
其它命令,自行尝试,一般以上配置即可
vue add element-plus
cnpm install vue-cli-plugin-element-plus
介绍
-
el-container:构建整个⻚⾯框架。
-
el-aside:构建左侧菜单。
-
el-menu:左侧菜单内容,常⽤属性:
:default-openeds:默认展开的菜单,通过菜单的 index 值来关联。
:default-active:默认选中的菜单,通过菜单的 index 值来关联。
-
el-submenu:可展开的菜单,常⽤属性:
index:菜单的下标,⽂本类型,不能是数值类型。
-
template:对应 el-submenu 的菜单名。
-
i:设置菜单图标,通过 class 属性实则。
- el-icon-message
- el-icon-menu
- el-icon-setting
-
el-menu-item:菜单的⼦节点,不可再展开,常⽤属性:
index:菜单的下标,⽂本类型,不能是数值类型。
表单数据校验
定义 rules 对象,在 rules 对象中设置表单各个选项的校验规则
required:'true', 是否为必填项
message:'error', 提示信息
trigger:'blur',触发事件
部署网站
GitHub
-
在 GitHub 上新建一个仓库
-
在<Root>下运行 cmd 并输入以下命令
若显示fatal: unable to access ...
,只是网络问题,多提交几次
-
再输入npm run build
打包 Vue 项目,此时项目目录下会多出一个dist
目录
-
Git 三连将 dist 推送到远程仓库(默认为 master 分支)
通常 dist 目录会被 git 忽略,需要将 dist 从忽略文件.gitignore
中删除,然后将 dist 目录推送到远程仓库
-
输入git subtree push --prefix dist origin gh-pages
将dist
目录推送到远程的gh-pages
分支。(若远程没有gh-pages
分支则会新建gh-pages
分支然后再推送)
备注:此处只能是gh-pages
分支,才能使用GitHub pages
功能
-
登录远程 GitHub 仓库,通过setting
-> Pages
-> Source
将gh-pages
设置为GitHub pages
的source
-
可以直接访问链接看网站了
注意:网站每次更新后,需要执行npm run build
命令,再上传到仓库
Vercel
使用场景:
静态站点完成以后,需要部署到线上,如果使用传统的部署方式,每次代码更新都需要在本地重新打包构建,然后替换服务器上的代码包,这种方式对于更新不频繁的站点是可取的。一旦站点更新的频繁,这种方式就很繁琐,很费人力。这里采用Vercel
+ GitHub
方式部署。
优势:
Vercel
+ GitHub
部署,一旦GitHub
上的代码更新了,会自动触发Vercel
重新打包构建,从而保证线上线下功能同步,大大地简化部署流程。
- 确保已将本地代码上传到
github
仓库。
- 登录 Vercel 账号 👉 导入 GitHub 仓库 👉 点击部署等等一系列无脑操作,即可访问了
问题合集
记录了一些报错等等五花八门的问题
-
更改端口号(3.x)
-
在项目根目录新建文件vue.config.js
-
输入以下代码:
其中port
为端口号,可自定义改
-
Vue 版本更新
先卸载 vue:npm uninstall vue-cli -g
如果卸载不了就:where vue
,通过文件路径将其手动删除
再安装:cnpm install -g @vue/cli
-
img 标签动态绑定 src 不显示本地图片
用将图片路径放入require()
中。
报错合集
-
Module not found: Error: Can't resolve 'sass-loader'
sass-loader 的作用
加载 SASS / SCSS 文件并将其编译为 CSS。
使用 css-loader 或 raw-loader 将其转换为 JS 模块,然后使用 ExtractTextPlugin 将其提取到单独的文件中。
node-sass 的作用
用于 webpack 的节点加载项
sass-loader 及 node-sass 的详细介绍情查看官方的中文文档,如下是其对应的官网地址。
-
访问图片 403 报错
在 HTML 代码的 head 中添加一句<meta name="referrer" content="no-referrer" />
即可
原理分析:
http 请求体的 header 中有一个 referrer 字段,用来表示发起 http 请求的源地址信息,这个 referrer 信息是可以省略但是不可修改的,就是说你只能设置是否带上这个 referrer 信息,不能定制 referrer 里面的值。
服务器端在拿到这个 referrer 值后就可以进行相关的处理,比如图片资源,可以通过 referrer 值判断请求是否来自本站,若不是则返回 403 或者重定向返回其他信息,从而实现图片的防盗链。上面出现 403 就是因为,请求的是别人服务器上的资源,但把自己的 referrer 信息带过去了,被对方服务器拦截返回了 403。
在前端可以通过 meta 来设置 referrer policy(来源策略),具体可以设置哪些值以及对应的结果参考这里。所以针对上面的 403 情况的解决方法,就是把 referrer 设置成no-referrer
,这样发送请求不会带上 referrer 信息,对方服务器也就无法拦截了。
浏览器中 referrer 默认的值是no-referrer-when-downgrade
,就是除了降级请求的情况以外都会带上 referrer 信息。降级请求是指 https 协议的地址去请求 http 协议,所以上面 403 的情况还有另一种解决方法就是,请求的图片地址换成 http 协议,自己的地址使用 http 协议,这样降级请求也不会带上 referrer。
技巧合集
可参考以下代码
router-link to 动态赋值
大概可以参考以下代码
配置 404 页面
打开index.js
文件,也就是配置路由的 JS 文件
或者(推荐)
如果是 Vue3.x 版本,则将path: "*"
写成path: "/:pathMatch(.*)*"
解决跨域问题
-
更改/新建vue.config.js
文件:
-
新建<Root>/src/utils/request.js
文件:
设置每个页面的 Title
-
在src\router\index.js
文件中添加:
-
在src\main.js
文件中添加:
Swiper 轮播图
鉴于 Element-Plus 里的走马灯 Carousel 组件渲染图片速度太慢,于是我选择用Swiper
可参考如下代码:
Echarts 插件
-
导入组件
cnpm install --save echarts
-
单文件导入:
返回上一页面 | 刷新页面
参考资料
文档:
视频: