1. 跨域
- JSONP为什么能解决跨域问题: script标签的src属性并不被同源策略所约束。通过script标签引入js文件,这个js文件又会返回一个js函数调用,也就是请求后通过callback的方式回传结果。不受同源策略的限制;兼容性更好;支持老版本浏览器;只支持get请求;
- jsonp返回的内容和json有什么不同:json是理想的数据交换格式,但没办法跨域直接获取,于是就将json包裹(padding)在一个合法的js语句中作为js文件传过去。这就是json和jsonp的区别,json是想要的东西,jsonp是达到这个目的而普遍采用的一种方法,当然最终获得和处理的还是json。所以说json是目的,jsonp只是手段。json总会用到,而jsonp只有在跨域获取数据才会用到。
- CORS 跨域: 普通跨域请求:只需服务器端设置Access-Control-Allow-Origin;带cookie跨域请求:前后端都需要进行设置,根据xhr.withCredentials字段判断是否带有cookie
- vue-jsonp: vue中使用jsonp方式跨域
- 反向代理
module.exports = {
devServer: {
open: true,
proxy: {
"/api": {
target: "http://192.168.0.17:8088",
changeOrigin: true, //允许跨域
pathRewrite: {
"^/api": "",
//会将请求/api/xuanke/index.php替换为/xuanke/index.php
},
},
},
},
};
2. CSS选择器( 三大特性 )
常用选择器:
- 标签选择器:
span { color: red } - 通用选择器:
* {color: red } - 类选择器:
.className: { color: red} - id选择器:
#idName: {color: red} - 后代选择器:
.parent .child {} - 子选择器:
div > span {} - 相邻兄弟选择器:
.parent + .child {} - 通用兄弟选择器:
.parent ~ .child {} - 并集选择器:
.parent ,.child {} - 交集选择器:
div.className(#id)css三大特性:
1、继承:父级文本样式被子级继承
2、层叠:当样式发生冲突时,权重低的样式会被覆盖
3、优先级:
!important > 行内样式 > id > 类 > 标签 > * > 继承
遵循就近原则
3. 请求方式(常见)
- get请求: 地址栏传参,用于查找
- post请求:请求体传参,用于新增
- put请求:类似post请求,用于更新
- delete请求: 用于删除
- options请求:请求预检,判断请求是否安全
4. Vue全家桶
- vue-cli,vue脚手架
- vueRouter
- vuex
- Axios
- UI框架
5. 多维数组转一维var arr = [1,[2,[3,[4,[5,6]]]]]
-
arr.join().split(',').map(Number) -
arr.toString().split(',').map(Number) -
arr.flat(Infinity) -
JSON.stringify(arr).replace(/(\[)|(\])/g, '').split(',').map(Number) -
function toOneArray(arr) { for(var i = 0; i< arr.length;i++){ if(Array.isArray(arr[i])){ toOneArray(arr[i]) }else{ newArr.push(arr[i]) } } }6.获取对象中的key,value
- object.keys()
- object.values()
7. 箭头函数和匿名函数的区别
- 箭头函数的this指向是根据上下文
- 匿名函数的this指向window,么有函数名,需要赋值个一个变量来调用
8. 函数名前加*代表什么?
- 说明函数的参数不确定
9. 闭包
有权访问另一个函数作用域找那个的变量的函数,闭包可能会导致内存泄漏,造成网页的性问题,解决方法是将用不到的局部变量删除或赋值未null
10. 怎样实现伪登录
- 添加白名单路由并加入到总路由中
- 白名单页面设置登录显示的内容如,登录中,请稍后
- 点击登录事件加载白名单页面,后传值调后台接口
11. 项目中的优化
- 层级不要过深
- 重复取值可以使用缓存
- v-for使用key
- v-if和v-show(频繁切换)根据情境使用
- 使用keep-alive缓存组件
12. vuex相关问题
13. MVC和MVVM区别
14. 双向绑定原理
采用数据劫持和发布者模式,对象使用object.defineProperty将属性进行劫持,数组通过重组数组的方法,在数据变动时发布消息给订阅者,触发相应的监听来渲染视图。
15. 两种情况下不会触发视图的更新
- 实例创建后添加新的属性到实例上
- 直接更改数组下标来修改数组中的值 以上两种不会更新,可以使用vue.set更新
16. vue生命周期以及父子组件的加载顺序
- 加载渲染过程
父 beforeCreate->父 created->父 beforeMount->子 beforeCreate->子 created->子 beforeMount->子 mounted->父 mounted
- 子组件更新过程
父 beforeUpdate->子 beforeUpdate->子 updated->父 updated
- 父组件更新过程
父 beforeUpdate->父 updated
- 销毁过程
父 beforeDestroy->子 beforeDestroy->子 destroyed->父 destroyed
17. 宏任务和微任务
18. vue是对视图的修改,不会直接操纵DOM,而是修改数据;jq是直接操纵DOM
19. vue和react的区别
20. hash和history的区别
- hash路由中带有#,不包含在请求中,对后端无影响,#之后的地址在请求中
- history 历史记录栈,不会立即发送请求,所有URL都会传给后台,所以缺少参数会报404,应默认一个404展示的页面
21. 事件绑定原理
原生事件绑定是通过addeventLinstener,组件中是通过vue自定义的$on绑定,如果要在组件上使用原生事件,需要加.native 修饰符,这样就相当于在父组件中把子组件当做普通 html 标签,然后加上原生事件。
22. 动态路由?路由复用会导致什么问题,怎么解决?
有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。那么,我们可以在 vue-router 的路由路径中使用“动态路径参数”(dynamic segment) 来达到这个效果。
问题:vue-router 组件复用导致路由参数失效怎么办?
解决方法:
1.通过 watch 监听路由参数再发请求
watch: { //通过watch来监听路由变化
"$route": function(){
this.getData(this.$route.params.xxx);
}
}
复制代码
2.用 :key 来阻止“复用”
<router-view :key="$route.fullPath" />
23. 防抖和节流
- 防抖: 事件被触发n秒后执行,如果在n秒内再次触发,重新计时
- 节流: 规定时间内只触发一次,时间内多次触发只执行一次
24. props中有哪些类型 详情查看官网 vuejs.bootcss.com/api/#props
- type
- default
- required 是否必传
- validate 自定义验证函数
25. keep-alive参数有哪些,详情查看官网vuejs.bootcss.com/api/#keep-a…
- include / exclude 允许有条件的缓存
- max 最多可以缓存多少组件