1.Vue的优点?
优点:轻量级、渐进式、组件化、响应式、虚拟DOM、单页面应用、数据与视图分离。
2.Vue的最大优势是什么?
1.可以进行组件化开发,使代码编写量大大减少,读者更加易于理解。
2.可以对数据进行双向数据绑定。
3.界面效果是响应式的。
4.相比传统的页面通过超链接是实现页面的切换和跳转,Vue使用路由不会刷新页面。
5.单页面应用,使页面局部刷新,可以不用每次跳转页面都要请求所有数据和dom渲染,这样大大提升了用户体验。
6.使用第三方UI组件库可以节省很多开发时间,提高开发效率。
3.在使用计算属性的时候,函数名和data数据源中的数据可以同名嘛?
可以同名,但data会覆盖methods,因为初始化数据顺序为computed,methods,data,props,如果其中有重名
的话,后面出现的属性自然就会覆盖之前挂载的属性。
4.Vue和jQuery两者之间的区别?
1.jQuery是直接操作DOM,在操作DOM频繁的场景里,jQuery的操作DOM行为频繁。
2.Vue是不直接操作DOM,Vue的数据与视图是分开的,Vue只需要操作数据即可;Vue利用虚拟DOM的技术,大大提
高了更新DOM时的性能,开发者只需要把大部分精力放在数据层面上;Vue集成的一些库,大大提高了开发效率,比
如Vuex、Vue-router等。
5.Vue2.0兼容IE哪个版本以上?
不支持IE8及以下,部分兼容IE9,完全兼容IE10以上,因为Vue的响应式原理是基于ES5的
Object.definePropety()实现的,这个方法不支持IE8及以下。
6.跟keep-alive有关的生命周期函数是哪些并描述下?
1.activated:被keep-alive缓存的组件使用时调用
2.deactivated:被keep-alive缓存组件切换时调用
7.说说对Vue中key的原理及对它的理解?
通过key给每一个vnode绑定一个唯一id,通过diff算法的优化策略,可以根据key,更准确, 更快的找到对应的
vnode节点,更高效的对比虚拟DOM中每个节点是否是相同节点,相同就复用,不相同就删除旧的创建新的。
8.Object.defineProperty 和 Proxy 的区别?
1.Proxy可以直接监听对象而非属性,可以直接监听数组的变化;
2.Proxy有多达13种拦截方法;
3.Proxy返回的是一个新对象,我们可以只操作新的对象达到目的,而Object.defineProperty只能遍历对象属性直接修改;
4.Object.defineProperty兼容性好,支持 IE9,而 Proxy 的存在浏览器兼容性问题。
9.style加scoped属性的用途和原理?
用途:防止全局同名CSS污染;
原理:在标签上填加唯一不重复的标记,通过data-v-hash 的方式,以保证唯一达到样式私有模块化的目的。
scoped样式穿透方法:/deep/ 、 >>> 、 ::v-deep
10.Vue组件如何进行传值?
1.父组件向子组件传值
在父组件中的子组件标签上绑定一个属性,挂载要传递的变量,在子组件中通过props来接受数据即可;
2.子组件向父组件传值
在子组件的方法中通过this.$emit("事件","参数")来触发在父组件中定义的事件并传递参数,在父组件中的子组
件标签上绑定一个事件来监听,有触发就调用其中的方法进行处理;
3.非父子组件之间的传值
可以通过Vuex实现;
4.父组件访问子组件的数据
在子组件中加上ref,然后通过this.$refs.ref方法即可访问到子组件的数据;
在父组件内部通过this.$children方法访问子组件的数据;
5.子组件访问父组件数据
子组件通过this.$parent方法或this.$root方法来访问到父组件或者根组件;
6.多层组件传值
在第一层组件模板内部使用v-bind="$attrs"传递属性,v-on="$listeners"传递触发的事件,下一层组件内部使
用this.$attrs可以访问到属性和this.$emit触发事件并传值。
11.讲一下组件的命名规范?
给组件命名有两种方式,一种是使用链式命名my-component,一种是使用大驼峰命名 MyComponent在字符串模
板中<my-component></my-component>和<MyComponent></MyComponent>都可以使用,在非字符串模板中最好
使用<MyComponent></MyComponent>,因为要遵循W3C规范中的自定义组件名 (字母全小写且必须包含一个连字
符),避免和当前以及未来的HTML元素相冲突。