mixins选项
作用:混入一些组件配置向并合并参与运行 场景:当你多个组件配置项,以及配置项里的代码相同,封装混入对象并复用 mixins: s[ ]
路由权限
什么是路由守卫?
- 守卫路由跳转的一个函数
全局前置路由守卫是什么?
- 任意路由跳转之前的一个函数,beforeEach
路由守卫作用?使用场景?
- 做权限判断然后绝对是否跳转路由还是中断跳转
- 例如:根据token决定是否能跳转到正常页面
- 无token未登录状态,先判断白名单(登录/注册/404页面)放行,其他页面强制跳转登录页
- 有token登录状态,判断如果还需要登录页直接打回首页,如果去其他页面则放行
在路由守卫中能否判断出token是否在有效期呢?
- 不能,token值需要去后端判断有效期
- 如果过期了,应该在axios响应拦截器里,全段后台返回的状态码
判断白名单js方法
includes
whiteList.includes(to.path)- 判断当前数组与指定元素是否匹配 匹配返回true 不匹配返回fasle
next() 是异步任务
跨域
什么是跨域?
- 是浏览器对ajax做出的限制
- 就是网页打开时地址栏和内嵌ajax请求的url地址中,协议,域名、端口,有一个对不上就会产生跨域
如何解决跨域?
- 方案1:让后端开启cors(跨域资源共享),他在响应设置一句
Access-Control-Allow-Origin:*
- 前端正常发送请求
- 方案2:代理转发 (服务器和服务器之间的请求没有跨域限制)
- 代理服务器配置
/api开头
devServer: {port: port,open: true,overlay: {warnings: false,errors: true},// 代理配置+ proxy: {// 这里的 api 表示如果我们的请求地址以 /api 开头的时候,就出触发代理机制'/api': { // 例如: axios请求的完整地址: /api/sys/logintarget: 'http://ihrm.itheima.net', // 需要代理的地址 (拼接在你本来要请求的地址前: http://ihrm.itheima.net/api/sys/loginchangeOrigin: true // 是否跨域,需要设置此值为 true 才可以让本地服务代理我们发出请求}// 这里没有pathRewrite, 因为后端接口就是ihrm.itheima.net/api这种格式,所以不需要重写}// 服务器前置,集成mock接口模拟接口数据(有真实接口)// before: require('./mock/mock-server.js')},
scoped
scoped会给这里选择器加上后续的【data-v-hash】属性选择器 他会给当前组件内的组件标签内跟标签绑定此属性,子标签不会绑定所以选不中 解决:样式穿透
::v-deep
作用:属性选择器加在前面变成父级选择器
登录未遂
退出登录跳转到登录页,把当前路由地址字符串,传递给登录页 fullPath完整路径 vue中
this$route{fullPath, meta, name, parmas, query, path} js中router.currentRoute 同vue中的$router js内置方法encodeURIComponent(字符串),返回值是处理后的url编码
创建文件夹命令 mkdir 文件夹名 多个文件夹名 用空格隔开
数据转换
将对象数据转换成二位数组 Object.values() 把某个对象中所有的value都拿出来组成一个新数组 map filter reduce 函数式编程 map:如果要处理的场景式基于一个数组 在个数不变的情况下 针对于每一项都做一些处理形成新数组 映射 filter: 如果基于一个数组经过一定的条件过滤得到一个新的数组 reduce:累加方法 如果我们想把数组中的每一项中的字段做累加运算的化
every / some 判断方法 返回布尔值 find / findIndex 查找方法 find -> item findInedx -> 下标值
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body></body><script>const list = [{ name: '张三', age:18 },{ name: '李四', age:8 },{ name: '王五', age:28 }]const targetList = [['张三', 18],['李四', 8],['王五', 28]]// 编写一个转化函数 可以把list的格式转化成targetList的格式// 对象数组 转化成 二维数组function transList(sorceList){const targetList = []// 写逻辑sorceList.forEach(item => {targetList.push(Object.values(item))});console.log(targetList);return targetList}function newList(list) {const newlist = []list.forEach(item => {const map = []Object.keys(item).forEach(key => {// item 是数组的第一个对象 这次循环 利用对象取值map.push(item[key])})// 取到两个值添加到map数组中 作为子级数组 在这里的循环添加newlist.push(map)})console.log(newlist);return newlist}function mapList(list) {return list.map(item => Object.values(item))}transList(list)newList(list)mapList(list)// Object.keys() Object.values()</script></html>
