这几天面试不少公司都很看重vue,不啰嗦,开整。
MVVM的实现主要是三个核心点:
- 响应式:vue如何监听data的属性变化
- 模板解析:vue的模板是如何被解析的
- 渲染: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:事件只触发一次