以下是常见的vue框架面试题,本篇文章展示十道。
1.请简述vue的单向数据流
父级prop的更新会向下流动到子组件中,每次父组件发生更新,子组件所有的prop都会刷新成最新的值。
数据从父组件传递给子组件,只能单向绑定,子组件内部不能直接修改父组件传递过来的数据(可以用data和computed解决)。
2.Vue循环的key作用
key值的存在保证了唯一性,Vue在执行时,会对节点进行检查,如果没有key值,那么vue检查到这里有dom节点,就会对内容进行清空并赋新的值,如果有key值存在,那么会对新老节点进行对比,比较两者key是否相同,进行调换位置或删除操作。
3.什么是计算属性
计算属性是用来声明式的描述一个值依赖了其他的值,当它依赖的这个值发生改变时,就更新DOM。
当在模版中把数据绑定到一个计算属性上时,vue会在它依赖的任何值导致该计算属性改变时更新DOM。
每个计算属性都包含一个getter和setter,读取时触发getter,修改时触发setter。
4.Vue中路由跳转方式(编程式/声明式)
Vue中路由跳转方式有两种,分别是声明式和编程式。
用js方式进行跳转的叫编程式导航 this.$router.push()。
用router-link进行跳转的叫声明式,router-view路由出口。
5.Vue的生命周期请简述
vue的生命周期就是vue实例创建到实例销毁的过程,期间会有八个钩子函数的调用。
beforeCreate(创建实例)
created(创建完成)
brforeMount(开始创建模版)
mounted(创建完成)
beforeUpdate(开始更新)
updated(更新完成)
beforeDestroy(开始销毁)
destroyed(销毁完成)
6.Vue路由传参的两种方式,params和query方式与区别
动态路由也可以叫路由传参,就是根据不同的选择在同一个组件渲染不同的内容。
用法上:query用path引入,params用name引入,接收参数都是类似的,分别是this.route.params.name。
url展示上:params类似于post,query类似于get,也就是安全问题,parmas传参相对更安全一点,query通过url传参,刷新页面还在,params刷新页面就不在了。
7.Vue中指令有哪些?
v-for:循环数组、对象、字符串、数字
v-on:绑定事件监听
v-bind:动态绑定一个或者多个属性
v-model:表单控件或者组件上创建双向绑定
v-if,v-else,v-else-if:条件渲染
v-show:根据表达式真假,切换元素的display
v-html:更新元素的innerhtml
v-text:更新元素的textcontent
v-pre:跳过这个元素和子元素的编译过程
v-clock:这个元素保持在元素上直到关联实例结束编译
v-once:只编译一次
8.Vue组件中的data为什么是函数
Data是一个函数时,每个组件实例都有自己的作用域,每个实例相互独立,不会互相影响。
如果是引用类型(对象),当多个组件共用一个数据源时,一处数据改变,所有的组件数据都会改变,所以要利用函数通过return返回对象的拷贝(返回一个新数据),让每个实例都有自己的作用域,相互不影响。
9.Vue双向绑定的原理
Vue双向绑定就是:数据变化更新视图,视图变化更新数据,Vue数据双向绑定是通过数据劫持和观察者模式来实现的。
数据劫持:objectdefineproperty它的目的是:当给属性赋值的时候,程序可以感知到,就可以控制改变属性值。
观察者模式:当属性发生改变的时候,使用该数据的地方也发生改变。
10.Vue中组件怎么传值
正向:父传子,父组件要把传递的数据绑定在属性上发送,子组件通过prop接收。
逆向:子传父,子组件通过this.$emit(自定义事件名,要发送的数据),父组件设置一个监听事件来接收,然后拿到数据。
兄弟:eventbus中央事件总线。
通过Vuex。