-
diff
对新旧vNode进行对比。同一父元素的同层元素进行对比。对比过程如下:
- 同层相同元素,不需要移动
- 同层相同元素,需要移动
- 同层不同元素,进行增加删除
-
双向数据绑定
-
Vue组件之间参数传递
-
父组件和子组件传值
- props方法(父组件)
- $emit方法
-
子组件之间传值
eventBus
-
-
Vue的生命周期
- beforeCreate
- creat
- beforemount
- mounted
-
mixin
- data中的数据app中优先,钩子函数被放在列表中,mixin的放在前面,值为对象的选项合并的时候相同属性取组件的属性
-
自定义指令
directives
-
Vue的优缺点。
优点: 渐进式、组件化的、单页面的、响应式的、数据和页面分开的
缺点:不利于seo(预渲染、服务器渲染),不支持IE8以下的版本(defineproperty、promise)、首屏加载时间长(vue会把所有js、css合并成一个vendor.js的文件,如果包含了很多库的话,vendor就会很大,增大了浏览器加载js的时间)
-
MVVM和MVC的区别
MVC的逻辑是model负责从数据库中拉取数据,view负责在前端显示,control负责把数据添加到view中
MVVM的逻辑是model和view分开,通过viewmodel来实现数据的双向绑定。
-
data为什么是函数
因为一个组件可能在很多地方被引用,如果是函数,那么引用的不同地方都能返回一个新的对象,不会造成数据污染
-
Vue修饰符
- lazy:表单光标离开时,才会改变数据
- trim:把v-model绑定的数据前后的空格去掉
- number:将输入的数据转化成数字
- .left 、right、middle:对应鼠标的左中右
- stop:停止冒泡
- capture:事件转化为捕获
- self:点击事件是自己的时候
- prevent:阻止默认事件
- passive:onscroll事件在移动端浏览器会产生卡顿,加上这个修饰符相当于加上了lazy
-
Vue内部指令
- v-show
- v-if、v-else-if、v-else
- v-for
- v-slot
- v-model
- v-bind
- v-on
- v-once
-
组件传值有哪些方式
- 父子:props、emit、provide/inject
- VueX
-
有几种路由模式
- hash:location接口上的hash会返回USVstring,包括URL后面的#和后面的标识符,hash字段有以下特点:
- #和后面的任何字符都不会发送到后端
- #后边的字符改变只会滚到相应的位置但是不会重新加载页面,改变之后,就会在浏览记录后面添加一次机会,点击退回可以返回上一个位置
- 可以通过window.location.hash来访问,也可以通过window.addEventListener('hashchange',fun)来监听变化
- history:通过pushState()、replaceState() 切换url,触发popState事件实现url切换,需要服务器配合。
- abstract:
- hash:location接口上的hash会返回USVstring,包括URL后面的#和后面的标识符,hash字段有以下特点:
-
动态设置class和style
通过对象、数组
-
v-if和v-show的区别
v-if:通过对dom元素进行生成和删除实现的
v-show:通过改变css来实现元素的显隐的
经常需要改变的元素采用v-show,否则使用v-if
-
computed 和watch有什么区别
- computed是通过已有变量计算目标变量,经常是多个变量合成一个变量,他支持缓存,不支持异步
- watch是一个变量发生变化的时候去执行回调函数,支持异步
-
生命周期
- beforeCreate: 创建了Vue实例,但是还没有进行初始化和响应式处理
- created:数据初始化和响应式处理完成,可以引用修改数据
- beforeMount:render在这里调用,生成了虚拟dom树,但是还没有挂载到el上
- mounted:已经挂载到el上
- beforeUpdate: 修改了虚拟dom树,但是还没有和旧虚拟dom树对比和打补丁
- update:修改到dom树上
- beforeDestrory:实例销毁之前调用,还可以访问到数据
- destroryed:实例销毁后调用
-
v-if和v-for不能一起使用?
在vue3中,v-if的优先级高于v-for,所以可能引用不到变量,在Vue2中,v-for比v-if有更高优先级,所以可能会导致不必要dom元素创建和删除
-
vuex是什么?有哪些属性和用处?
vuex是单一的状态树,一个对象包含了全部的应用层级状态。能够让我们直接定位任意特定的状态片段
state:定义了应用状态的数据结构,可以设置默认的初始值
getters:允许从store中获取数据,并且也可以绑定一些操作
mutation:唯一改变store中状态的方法,必须是同步函数
action:用于提交mutation,可以包含任意异步函数
module:单一的store分解为多个store,保存在状态树中
const store = new Vuex.Store({ state:{ count: 1, }, getters:{ getCount:function(){ return state.count + 1; } } }) const app = Vue.createApp({ d })
-
不需要响应式的数据
- 放在data外面定义
- Object.freeze
-
watch有哪些属性,有什么用
- deep:可以深度检测对象中的每一个属性,
- immediate:立刻执行handler函数
-
父子组件生命周期顺序
- 父beforeCreate、父created、父beforeMount、子beforeCreate、子Created、子beforeMount、子Mounted、父Mounted
-
什么是nextTick
- 将回调函数放在下一次更新dom的时候调用