持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情
1.文件读取器
- FileReader使用步骤
1.实例化一个FileReader对象
const reader = new FileReader()
2.打印reader看一下
//console.log(reader)
3.调用readAsDataURL
reader.readAsDataURL(要转格式的文件)
4.调用onload事件
reader.onload = () => {
//图片格式转化完毕要做什么事
}
5.reader.result存储的是转化好的bese64格式的文件
2.使用拦截器的时候
1.使用请求拦截器,一般用于设置请求头
2.使用响应拦截器,一般用于发送请求失败要做的事情
如果不清楚代码到底写在失败的回调还是成功的回调,可以先分别log一下,看一下会触发哪一个回调函数
3.语法
请求拦截器
axios.interceptors.request.use((config) => {
// 请求成功要做什么
// console.log(config)
return config
}, (err) => {
// 请求失败要做什么
return err
})
响应拦截器
// 添加响应拦截器
axios.interceptors.response.use((config) => {
// 响应成功做什么
// console.log('成功')
return config
}, (err) => {
// 响应失败做什么
// console.dir(err)
}
return err
})
3.数据持久化
vuex-persistedstate
使用步骤
1.npm i vuex-persistedstate
2.引入,一般是在vuex中引入
import createPersistedState from 'vuex-persistedstate'
3.挂载到插件
plugins: [createPersistedState()],
4.表单的三层结构--校验
el-form:表单的三层结构
el-form: model rules
el-form-item: prop
el-input: v-model
5.浅拷贝解决方案
1.Object.assigin({},要拷贝的对象),拷贝完成后{}数据在这里面
userForm:Object.assigin({},要拷贝的对象)
2.展开运算符:{...对象}
userForm:{...对象}
6.变量的生命周期
1.全局变量的生命周期:
生:页面加载时,死:页面关闭时
2.局部变量的生命周期:
生:函数调用时,死函数调用完毕时
3.怎么改变局部变量的生命周期
function fn(){
let b=20
retrun function (){
return b
}
}
7.ajax请求
1.简写:axios.get(地址,{params:参数}) get或delete
2.简写:axios.post(地址,{params:参数}) post或put(部分) patch(全部)
3.完整写法
axios({
url:'请求路径',
method:'get',
data: { 'post请求参数'},
params: { 'get请求参数'}
}).then(res=>{
//成功回调
console.log(res)
})
8.vue里route和router的区别
-
this.$route:当前激活的路由的信息对象。每个对象都是局部的,可以获取当前路由的 path, name, params, query 等属性。
-
route还可以拿路径后面的参数
- query查询 字符串传参,使用场景:页面搜索
传:/page2?a=1&b=2 收 $route.query
-
params传参 使用场景: 详情页 传: /page2/1/2 路由配置
接:$route.params
-
this.$router:全局的 router 实例。通过 vue 根实例中注入 router 实例,然后再注入到每个子组件,从而让整个应用都有路由功能。其中包含了很多属性和对象(比如 history 对象),任何页面也都可以调用其 push(), replace(), go() 等方法。
9.图片转化格式
img标签的src支持base64格式和图片地址(blob二进制) 的方式赋值
1.浏览器有一个内置处理图片的API ---url可以转图片格式为blob获取到图片地址
const url = URL.createObjectURL(图片文件)
url可以得到一个图片地址.
// 图片预览--浏览器有一个内置处理图片的API ---url可以转图片格式为blob获取到图片地址
const url = URL.createObjectURL(files[0])
// 赋给img标签的src属性
this.$refs.imgRef.src = url
//如果要给图片赋值为默认的路径不能直接赋值为路径
可以将图片作为模块导入,再付给src
2.图片转base64格式
// new FileReader()文件读取器
const reader = new FileReader()
// console.log(reader) //readAsDataURL图片转数据路径函数
reader.readAsDataURL(e.target.files[0])
// 数据读取完毕后触发这个回调
reader.onload = () => {
// console.log(reader.result)
// 把转化格式后的值赋给avatar存起来
this.avatar = reader.result
// console.log(this.avatar)
10.数据转化FormDate格式
// 数据转换格式
//实例化一个FormData对象
const fd = new FormData()
//循环向fd对象中赋值
Object.keys(this.pubForm).forEach(el => {
fd.append(el, this.pubForm[el])
})
// console.log(...fd) 查看是否赋值成功
//或者是通过dir展开利用fd中forEach,打印查看所有元素
- this.pubForm要遍历的数组
11.过滤器
1.局部过滤器
• 局部过滤器只能在当前 Vue 实例中使用。
1.引入
import dayjs from 'dayjs'
2.使用
filters: {
过滤器名字: function (value) {
return 要过滤的业务代码
}
2.全局过滤器--以dayjs为例
// 引入dayjs
import dayjs from 'dayjs'
// 定义全局过滤器
Vue.filter('dateFormat', (value) => {
return dayjs(value).format('YYYY-MM-DD HH:mm:ss')
})
-
使用 {{ 实参| 过滤器名称}}
-
可以传多个参数 {{ 实参1,实参2| 过滤器名称}}
12.路由懒加载
是什么: 延迟加载或按需加载,就是用到的时候再进行加载
作用: 1.主页的加载速度更快
2.提高用户的体验感
3.减轻服务器的压力
语法:
触发: 用户点击了某个路径就会自动触发
13.promise
是什么:
- promise代表的是一个异步的操作,它是构造函数 new promise
2.new promise() 时,要穿一个参数,这个参数一般都是回调函数,这个 函数会立即触发。
3.回调函数一般都写异步的代码
4.promise的原型上一些方法,这些方法是可以被实例调用的 then catch finally
promise的三种状态
1.pending 等待
2.fulfilled 成功
3.rejected 失败
方法
14.native修饰符
将组件的原生事件绑定到组件内部的根元素上原理是冒泡,会触发同名事件
1.背景: 我们在使用别人的框架时,如果添加了点击事件没有被触发,是因为其内部没有做this.$emit('事件名')的触发.
2.解决: 此时就可以使用.native修饰符,将原生事件绑定到组件的根元素上
15.跨域的解决方案
1.jsonp 缺点:只发送get请求 不能发送post请求
原理: 动态的创建script标签,添加src属性(但是这个请求是异步的),需要我们在页面声明一个函数,后端(服务器端)调用,把数据作为函数返 回给我们。
2.cors
原理:在响应头中添加 Access-Control-Allow-Origin:*
3.方向代理
原理: 服务器与服务器之间不存在跨域,可以相互同信
在vue.config.js中做以下配置
devServer:{
proxy: {
/* 它会自动匹配路径中是否包含api,包含走target,它会把axios的本地路径偷偷替换成目标路径
http://localhost:8888/api/sys/login => http://ihrm-java.itheima.net/api/sys/login
不包含api的话,它会走pathRewrite,用''空字符串替换/api
=>http://ihrm-java.itheima.net/sys/login
*/
// '/api': {
// // 目标路径,
// target: 'http://ihrm-java.itheima.net',
// // 路径重写
// pathRewrite: {
// '^/api': ''
// }
// }
}
16.includes()方法
语法: A.includes(B),判断A是否包含B
返回值: 此方法返回一个布尔值
17.进度条-NProgress
使用步骤
1.下载 npm i NProgress
2.导入插件和样式
import NProgress from 'nprogress' // 引入一份进度条插件
import 'nprogress/nprogress.css' // 引入进度条样式
3.常用的方法
开启进度条 : NProgress.start()
结束进度条 : NProgress.done()
4.注意点: 一般会使用在路由后置守卫里,但是如果在前置守卫跳转到其他页面的话,就不会走后置路由,这时候就需要手动停止进度条 。
18.路由守卫
1.前置路由守卫
// 路由前置守卫
router.beforeEach((to, from, next) => {
to:到哪里去
from:从哪儿来
next:放行
}
2.后置路由守卫
// 路由后置守卫
router.beforeEach((to, from) => {
to:到哪里去
from:从哪儿来
}
19.自定义指令
1.全局注册
// 注册一个全局自定义指令 `v-focus`
Vue.directive('指令名', {
// 当被绑定的元素插入到 DOM 中时……
inserted: function (el,binding) {
// el 指令所绑定的元素,可以用来直接操作 DOM。
//binding 一个对象,包含 A: value:指令的绑定值
B: oldValue:指令绑定前一个值
name:指令名,不包括 v- 前缀。
}
})
2.局部注册
directives: {
指令名: {
// 指令的定义
inserted: function (el) {
// el 指令所绑定的元素,可以用来直接操作 DOM。
}
}
}
3.使用: 和vue系统自带的指令使用一样
文档地址:cn.vuejs.org/v2/guide/cu…
补充:
在项目较大的时候,可以用单独的文件放自定义指令对象, 1.如:
2.在main.js中全部导入
3.循环遍历注册全局指令