Vue前端面试题总结

Vue前端面试题总结


1、v-model的原理

v-model是:value="msg"@input="msg=$event.target.value"的语法糖,其中:value="msg"是绑定了数据,value就是input输入框里的值;@input="msg=$event.target.value"就是监听input输入框里值的变化,然后改变值。一句话概括就是,绑定数据并且监听数据改变。
Object.defineProperty定义新属性或修改原有的属性; vue的数据双向绑定的原理就是用的Object.defineProperty这个方法,里面定义了setter和getter方法,通过观察者模式(发布订阅模式)来监听数据的变化,从而做相应的逻辑处理。

2、Vue的风格指南

(1)使用v-for时记得加key,可以快速定位到需要更新的DOM节点,提高效率。
(2)永远不要把 v-if 和 v-for 同时用在同一个元素上。提高渲染效率 。
(3)优先通过 Vuex 管理全局状态,而不是通过 this.$root 或一个全局事件总线 。
(4)组件的 data 必须是一个函数。

3、子组件访问父组件的3种方式

(1)直接在子组件中通过this.$parent.event来调用父组件的方法 (2)在子组件里用$emit向父组件触发一个事件,父组件监听这个事件 (3)父组件把方法传入子组件中,在子组件里直接调用这个方法

4、父组件中怎么接受子组件的多个参数

子组件向父组件发射方法this.$emit("名称",data) data为一个对象,对象内可以封装自己想传递的任何数据。父组件接收方法,解封取到自己需要的数据。

5、父组件怎么访问到子组件的实例或者子元素?

在引用的子组件标签上加 ref属性如ref="xxxx",在父组件通过this.$refs.xxxx.子组件方法名或者 this.$children.子组件的方法名来调用。

6、v-once和v-pre的使用场景

v-once: 只渲染元素和组件一次,随后的重新渲染,视图不发生更新,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。
v-pre: 某个元素如果添加v-pre指令,内部的元素会被vue直接跳过,不过渲染 。将来有可能有一大段的文本,我很明确的知道这段文本是不需要vue来处理

7、定时器的使用和销毁

mounted:
mounted() {
    this.timer = setInterval(() => {
      setTimeout(this.getAllMethod, 0)
    }, 1000*30)
   }
destroyed:
destroyed() {
    clearTimeout(this.timer);
    this.timer=null;
  },

8、vue中template有什么用?

当做一个不可见的包裹元素,减少不必要的DOM元素,整个结构会更加清晰。 template不会出现在dom结构中,经常和v-if搭配使用。

9、nextTick原理

用法:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。 Vue官网提到DOM的更新是异步执行的,只要数据发生变化,将会开启一个队列,并缓冲在同一事件循环中发生的所有数据变更。如果同一个watcher被多次触发,只会被推入到队列中一次。
简单来说,就是当数据发生变化时,视图不会立即更新,而是等到同一事件循环中所有数据变化完成之后,再统一更新视图。

10、v-cloak的理解使用

在网络不好或加载数据过大的情况下,页面在渲染的过程会闪烁Mustache 标签:{{}}
为了用户有更好的优化体验,Vue加入了延缓响应的指令v-cloak,在与css:[v-cloak] { display: none } 的配合下,可以隐藏未编译 Mustache 的标签直到实例准备完毕,v-cloak属性才会被自动去除,对应的标签也才可见了。

11、vue生命周期总共有几个阶段?

(1)创建 1、beforeCreate:这个阶段实例已经初始化,只是数据观察与事件机制尚未形成,不能获取DOM节点(没有data,没有el) 使用场景:因为此时data和methods都拿不到,所以通常在实例以外使用 2、created:实例已经创建,仍然不能获取DOM节点(有data,没有el) 使用场景:模板渲染成html前调用,此时可以获取data和methods,so 可以初始化某些属性值,然后再渲染成视图,异步操作可以放在这里。
(2)载入 1、beforeMount:是个过渡阶段,此时依然获取不到具体的DOM节点,但是vue挂载的根节点已经创建(有data,有el) 2、mounted:数据和DOM都已经被渲染出来了 使用场景:模板渲染成html后调用,通常是初始化页面完成后再对数据和DOM做一些操作,需要操作DOM的方法可以放在这里
(3)三、更新 1、beforeUpdate:检测到数据更新时,但在DOM更新前执行 2、updated:更新结束后执行 使用场景:需要对数据更新做统一处理的;如果需要区分不同的数据更新操作可以使用$nextTick
(4)四、销毁 1、beforeDestroy:当要销毁vue实例时,在销毁前执行 2、destroyed:销毁vue实例时执行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值