Vue面试题

217 阅读3分钟

这几天面试不少公司都很看重vue,不啰嗦,开整。

MVVM的实现主要是三个核心点:

  1. 响应式:vue如何监听data的属性变化
  2. 模板解析:vue的模板是如何被解析的
  3. 渲染:vue模板是如何被渲染成HTML的

vue图片报错,或者说找不到图片

static文件夹使用绝对路径,assets使用相对路径

递归组件

递归组件就是指组件在模板中调用自己,开启递归组件的必要条件,就是在组件中设置一个 name 选项。比如下面的示例:总结下来,实现一个递归组件的必要条件是:

  • 要给组件设置 name;
  • 要有一个明确的结束条件

递归组件常用来开发具有未知层级关系的独立组件,在业务开发中很少使用。比如常见的有级联选择器和树形控件:

递归使用场景

组件中 data 为什么是函数?

因为组件是用来复用的,JS 里对象是引用关系,这样作用域没有隔离,而 new Vue 的实例,是不会被复用的,因此不存在引用对象的问题。

在做文本渲染的时候如何保证将数据原样输出?

数据渲染三种实现方式:

  • v-html:可以输出真正的 HTML,但考虑到 XSS,不建议这么做

  • v-text:纯文本输出

  • {{}}:与 v-text 功能相同,写法不同而已

Vue 中的过滤器是如何来传递参数的?

  • 过滤器定义:在 Vue 实例中通过 filters 对象下进行设置指定的过滤器
  • 过滤器使用:在渲染数据的时候通过 | 管道来进行对过滤器的使用
  • 过滤器传参:默认数据在使用过滤器的时候,数据源作为过滤器的第一个参数,如果需要传递更多的参数,在 过滤器后面添加(参数 2,参数 3)即可。

Vue 中 methods 和 computed 有什么区别?应用场景如何?

首先,methods 和 computed 都可以实现相同的功能,不同的是 computed 中所计算的依赖值没有发生变化,那么 computed 将不会执行,只会使用缓存,而 methods 每次都会执行,两者之间存在一个惰性的问题,如果我们希望结果值是每次都需要精确算出来的,无论依赖值是否改变,那么我们使用 methods,如果我们 希望可以用缓存来缓解因为大量计算带来的时间及性能问题,那么使用 computed。

Vue 中如何高效复用一个元素,如何解除对元素的复用?

Vue 会尽可能高效的渲染元素,通常会复用已有元素而不是从头进行渲染,那么解除这种渲染方式,我们可以 在当前元素上面增加 key 属性,表示他的唯一性,那么 Vue 的渲染的时候就会重新对元素渲染而不是进行复 用了。

除了通过原生的DOM事件对象来解决冒泡等常见问题,Vue自身有什么方式来解决这类需求?

  • .stop:阻止事件冒泡
  • .prevent:阻止默认行为
  • .capture:使用事件捕获行为
  • .self:表明必须当期那元素本身触发事件监听器
  • .once:事件只触发一次