一、Vue的最大优势是什么?
简单易学,轻量级整个源码js文件不大,双向数据绑定,数据驱动视图,组件化,数据和视图分离,vue负责关联视图和数据,作者是中国人(尤雨溪),文档都是中文的,入门教程很多,容易上手,相比于传统网页,vue是单页面可以只刷新某一部分
二、mvvm和mvc的区别是什么?
MVC:也是一种设计模式,组织代码的结构,是model数据模型,view视图,controller控制器,在控制器层编写js代码,来控制数据和视图关联。m和v是有关联的,m层一旦发生变化,v层需要通过观察者模式来更改视图
MVVM:即Model-View-ViewModel的简写。即模型-视图-视图模型, VM是这个设计模式的核心, 连接v和m的桥梁,内部会监听DOM事件, 监听数据对象变化来影响对方. 我们称之为数据绑定
三、model层数据变化了,viewmodel是如何监听到的呢?(vue的双向数据绑定的原理)
viewmodel创建的时候,会把所有的data数据绑定到vm实例上,被vm所管控,
内部借助于Object.defineProperty设置setter和getter方法
当获取数据的时候,触发getter方法,当修改数据的时候设置setter方法,
当数据设置完成之后呢,在setter方法内部会进一步的触发wather方法,实现虚拟dom的对比,更新真实的dom
四、v-show和v-if的区别
原理:
v-show控制显示和隐藏的原理:控制元素的display:none和display:block
v-if控制显示和隐藏的原理:控制dom元素的创建和删除
性能消耗:大量的操作dom会引起页面的重绘,很耗费性能 【获取元素 添加元素 删除元素】
v-if: 在每一次切换都会消耗性能
v-show: 初始显示,消耗一次性能
使用的时候:
频繁的切换显示隐藏 使用v-show
不频繁的切换显示隐藏 使用v-if
安全性能(在后面vue项目中 权限管理)
v-if 更加安全
v-show 不安全
五、重绘与回流(重排)的概念
回流(重排): 当浏览器必须重新处理和绘制部分或全部页面时,回流就会发生 (布局变化)
重绘: 不影响布局, 只是标签页面发生变化, 重新绘制 (标签变化)
注意: 回流(重排)必引发重绘, 重绘不一定引发回流(重排)
----------------------------------
六、Vue和jQuery区别是什么?
jQuery应该算是一个插件, 里面封装了各种易用的方法, 方便你使用更少的代码来操作dom标签
Vue是一套框架, 有自己的规则和体系与语法, 特别是设计思想MVVM, 让数据和视图关联绑定, 省略了很多DOM操作. 然后指令还给标签注入了更多的功能
七、 为什么避免v-for和v-if在一起使用
Vue 处理指令时,v-for 比 v-if 具有更高的优先级, 虽然用起来也没报错好使, 但是性能不高, 如果你有5个元素被v-for循环, v-if也会分别执行5次.
八、 vue2中直接使用 数组[索引]的方式修改数据,会导致无法更新的情况?为什么?怎么解决?
Vue的响应式原理是通过 Object.defineProperty方法来实现数据劫持,但是有一个小缺陷,无法劫持直接修改数组元素的值
可以使用 Vue.$set(this.arr,0,'张三')的方式来实现数组元素的修改
九、 说出至少4个Vue指令及作用
v-for 根据数组的个数, 循环数组元素的同时还生成所在的标签
v-else 必须和v-if连用 不能单独使用 否则报错
v-bind 动态绑定 作用: 及时对页面的数据进行更改, 可以简写成:分号
v-on 给标签绑定函数,可以缩写为@,例如绑定一个点击函数 函数必须写在methods里面
v-text 解析文本
v-html 解析html标签
v-model //双向绑定,用于表单
十、 vue.js的两个核心是什么
数据驱动和组件化
十一、 简述vue过滤器?
过滤器是将后台返回的数据换一种形式输出,不改变原来的数据
应用场景:商品价格,处理后台传入的时间戳
有全局过滤器 和 局部过滤器
. 全局过滤器
Vue.filter('过滤器',对应的过滤器函数)
局部过滤器
通过在Vue实例上挂载filers添加过滤器,只能在当前组件内部使用