Vue面试题总结
组件之间传值
父传子通过属性传递,子组件通过props接收数据
子传父通过方法传递,子组件通过$emit触发自定义方法并且传递信息
非父子通过事件总线bus进行传值,传递使用emit触发事件,接收使用on注册事件
Vue双向数据绑定的原理
采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的 setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。
Vuex刷新页面数据丢失
监听页面刷新事件,在刷新前将store中的数据存储到sessionstorge中。每次进入页面的时候先读取 sessionstorage中的值并把它赋给store,这样就保留了刷新前的数据。
TCP三次握手(建立连接)
1)客户端向服务端发送连接请求(发送SYN包,进入SYN-SEND状态)
2)服务端接收到连接请求后,同意向客户端建立连接(发送ACK-SYN包,进入SYN-RCVD状态)
3)客户端接收到服务端的同意后,与服务端确认建立连接
TCP四次挥手(连接释放)
1)客户端向服务端发送断开连接请求(FIN=1,进入FIN-WAIT-1状态)(第一次挥手)
2)服务端接收到断开请求后,同意向客户端断开连接,但是还有数据在传输,要等数据先传输完,所以 先告知客户端收到断开请求了(进入CLOSE-WAIT状态)(第二次挥手)
3)服务端数据传输完成后,告知客户端,要关闭连接了(第三次挥手)
4)客户端接收到服务端的断开连接消息后,告知服务端已收到断开连接的消息(第四次挥手)
如何判断一个数组是数组
1.instanceof
2.Array.isArray()
3.Object.prototype.toString.call(arr)
如何修改UI组件中的样式
方式一:在当前新加一个style标签,不和前一个style标签冲突scoped
方式二:穿透(父元素 /deep/ 子元素)
方式三:穿透(父元素 >>>(不支持less) 子元素)
移动端开发环境如何在手机上测试
vue项目中package.json/scripts/"dev"中加上 --host + 局域网IP(要求手机和电脑在同一个局域网)
为什么组件中的data是一个函数
因为组件是可复用的实例,而组件不管被复用多少次data中的数据都应该是相互隔离的,如果是对象,
那所有的组件都将共享一个数据对象,只要有一个参数被修改,则所有的组件都会受影响
$route和$router有什么区别
$route:路由参数对象,所有路由参数(params,query)
$router:路由导航对象(路由跳转)
路由有哪几种导航钩子,分别是什么
第一种:全局导航钩子
beforeEach、afterEach、beforeResolve
第二种:组件内的钩子
beforeRouteEnter、beforeRouterUpdate、beforeRouteLeave
第三种:单个路由独享的钩子
beforeEnter(路由配置中设置)
Vue安装包的时候 -D -S 有什么区别
-S安装包会在package中的dependencies对象中,即生产环境
-D安装包会在package中的devDependencies对象中,即开发环境
单页面应用的优缺点
交互体验好,前后端分离,减轻服务器压力
不利于SEO,首屏加载慢,不适合开发大型项目