知识点记录
promise的作用 promise 是异步函数的解决方案,ajax是异步请求,多层嵌套会造成回调地狱,promise模拟同步,将异步回调类似于同步来处理业务逻辑。
跨域:同源策略(协议、域名或者端口有一个不同就是跨域,Ajax请求会失败)->proxy配置反向代理解决
this.$nextTick() 主要作用就是等数据改变引发 DOM 重新渲染完成之后才会执行。
ES6常用面试题https://zhuanlan.zhihu.com/p/102442557
你对vue的理解: (Model 模型层-View 视图层-ViewModel 视图模型层)MVVM 双向绑定,组件化(提高代码复用率,降低整个系统的耦合性可随时替换组件)
指令系统:v-on == @click v-if v-for v-model(input) --for比if优先级高
vue与传统js的区别,不操作dom节点,双向绑定 通过修改数据控制视图
组件化->父子组件传值 父传子:props 子传父:$emit
props属性:default:默认值 ;require:true是否校验 ;type数据类型 $emit(父组件定义的方法名,参数)
说说你对SPA(单页应用)的理解? 单页面应用指一个系统只加载一次资源,然后下面的操作交互、数据交互是通过router、ajax来进行,页面并没有刷新;
watch监听: watch: {xxx:{handler: function(val, oldVal) { } }}
vue生命周期:创建前后, 载入前后,更新前后,销毁前销毁后 beforcreate created beforemounte mounted beforeUpdate updated beforeDestroy destroyed
vue组件之间的通信:父子组件通信,兄弟组件之间的通信,祖孙与后代组件之间的通信,非关系组件间之间的通信
父子组件:$refs props $emit 其他都用 vuex
vue中v-if v-show怎么理解: show不会重新渲染,if会重新渲染
vue组件和插件的区别:组件是.vue文件,注册方式是components:{} 插件通常用来为 Vue 添加全局功能(element,vuex,先引入,再vue.use(XXX)注册)
vue data 是一个函数 data(){return{XXX:XXX}} 组件实例对象data必须为函数,目的是为了防止多个组件实例对象之间共用一个data,产生数据污染。采用函数的形式,initData时会将其作为工厂函数都会返回全新data对象
Vue中给对象添加新属性界面不刷新? 只更新数据,视图不更新,解决方案 通过vue.set去强制更新
this.$set(this.obj,key,value)
this.$set(this.list,index,{name:'22122',value:'22122'})
Vue实例挂载: import qs from 'qs' Vue.prototype.$qs = qs
Vue中的$nextTick怎么理解? 等待同一事件循环中的所有数据变化完成之后,会将队列中的事件拿来进行处理,进行DOM的更新,当dom渲染结束后再进行的操作
vue的mixin的理解:混入,可以混入 created+methods
说说你对slot的理解?slot使用场景有哪些?插槽,具名不具名插槽
子组件:<slot name="content"></slot>
父组件:<template v-slot:content>内容...</template>
说说为什么要在列表组件中写 key,其作用是什么?唯一标识,高效地更新虚拟DOM
说说你对keep-alive的理解是什么?怎么缓存当前的组件?缓存后怎么更新?
路由缓存,把需要缓存的页面包裹起来,通过路由meta去判断
<keep-alive>
<router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
缓存后如何更新:通过activated钩子函数
过滤器 {{ 数据 | 过滤器名字 }} filters:{过滤器名字:function(value){return xxx}}
什么是虚拟dom:createElement 创建 VNode 的过程,每个 VNode 有 children,children 每个元素也是一个VNode,这样就形成了一个虚拟树结构,用于描述真实的DOM树结构
说下你的vue项目的目录结构,如果是大型项目你该怎么划分结构和划分组件呢?assets(静态文件) components(组件)router(路由)view(页面)
控制权限:接口权限:校验token
按钮权限:v-if
菜单权限:根据角色去判断哪些菜单展示,通过全局路由守卫去处理
路由权限:在路由上打标记 meta: {} 每次跳转前校验
跨域是什么: 跨域本质是浏览器基于同源策略的一种安全手段,所谓同源(即指在同一个域)具有以下三个相同点:协议相同(protocol) 域名(host) 端口相同(port)
如何解决跨域:proxy代理
amodule.exports = {
devServer: {
host: '127.0.0.1',
port: 8084,
open: true,// vue项目启动时自动打开浏览器
proxy: {
'/api': { // '/api'是代理标识,用于告诉node,url前面是/api的就是使用代理的
target: "http://xxx.xxx.xx.xx:8080", //目标地址,一般是指后台服务器地址
changeOrigin: true, //是否跨域
pathRewrite: { // pathRewrite 的作用是把实际Request Url中的'/api'用""代替
'^/api': ""
}
}
}
}
}