前端Vue面试题 X 10

187 阅读1分钟

以下是常见的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.query.namethis.route.query.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。