前端vue面试题个人总结

1、介绍Vue中的常用的指令

  • v-bind 绑定属性机制,可以简写为:
    • 对象方法 v-bind:class="{'orange': isRipe, 'green': isNotRipe}"
    • 数组方法v-bind:class="[class1, class2]"
    • 行内 v-bind:style="{color: color, fontSize: fontSize+'px' }"
  • v-on 绑定事件机制,可以简写为@
  • v-for
  • v-html 以html标签形式显示
  • v-text 可以简写为{
  • v-if
  • v-show
  • v-model 双向数据绑定

2、vue中常用的事件修饰符

  • .prevent: 阻止默认事件;如:v-on:submit.prevent阻止默认事件;
  • .stop: 阻止单击事件冒泡;如:v-on:click.stop阻止事件冒泡;
  • .self: 当事件发生在该元素本身而不是子元素的时候会触发;
  • .capture: 事件侦听,事件发生的时候会调用
  • .once 事件只触发一次

3、谈谈你对MVVM开发模式的理解

  • MVVM分为Model、View、ViewModel三者。
  • Model 代表数据模型,数据和业务逻辑都在Model层中定义;
  • View 代表UI视图,负责数据的展示;
  • ViewModel 负责监听 Model 中数据的改变并且控制视图的更新,处理用户交互操作;
  • Model 和 View 并无直接关联,而是通过 ViewModel 来进行联系的,Model 和 ViewModel 之间有着双向数据绑定的联系。因此当 Model 中的数据改变时会触发 View 层的刷新,View 中由于用户交互操作而改变的数据也会在 Model 中同步。
  • 这种模式实现了 Model 和 View 的数据自动同步,因此开发者只需要专注对数据的维护操作即可,而不需要自己操作 DOM。

4、 v-if 和 v-show 有什么区别?

  • v-show

    • v-show是css切换,频繁切换时用v-show,

    • v-show 仅仅控制元素的显示方式,将 display 属性在 block 和 none 来回切换;

    • 当我们需要经常切换某个元素的显示/隐藏时,使用v-show会更加节省性能上的开销;

    • v-show对应的值无论是true还是false,对应HTML元素都会存在于浏览器的文档中;

  • v-if

    • v-if=‘false’ v-if是条件渲染,当false的时候不会渲染,

    • v-if是完整的销毁和重新创建,运行时较少改变时用v-if,而v-if会控制这个 DOM 节点的存在与否。

    • 当只需要一次显示或隐藏时,使用v-if更加合理。

    • v-if如果是false的话,对应HTML元素直接不在浏览器的文档中了。

5、请详细说你对vue生命周期的理解?

  • 总共分为8个阶段创建前/后,载入前/后,更新前/后,销毁前/后。
    • beforeCreate----创建前 组件实例更被创建,组件属性计算之前,数据对象data都为undefined,未初始化。
    • created----创建后 组件实例创建完成,属性已经绑定,数据对象data已存在,但dom未生成,$el未存在
    • beforeMount---挂载前 vue实例的$el和data都已初始化,挂载之前为虚拟的dom节点,data.message未替换
    • mounted-----挂载后 vue实例挂载完成,data.message成功渲染。
    • beforeUpdate----更新前 当data变化时,会触发beforeUpdate方法
    • updated----更新后 当data变化时,会触发updated方法
    • beforeDestory---销毁前 组件销毁之前调用
    • destoryed---销毁后 组件销毁之后调用,对data的改变不会再触发周期函数,vue实例已解除事件监听和dom绑定,但dom结构依然存在

7、vue中<keep-alive>的作用;active-class是哪个组件的属性?

  • 把切换出去的组件保留在缓存中,可以保留组件的状态或者避免重新渲染。
  • active-class是vue-router模块的router-link组件的属性。

8、计算属性及和 watch 、methods的区别

  • computed看上去是方法,但是实际上是计算属性,它会根据你所依赖的数据动态显示新的计算结果。计算结果会被缓存,computed的值在getter执行后是会缓存的,只有在它依赖的属性值改变之后,下一次获取computed的值时才会重新调用对应的getter来计算,

    • computed可以依赖其他computed,甚至是其他组件的data;
    • 依赖于数据,数据更新,处理结果自动更新;
    • 计算属性内部this指向vm实例;
    • 在组件调用时,直接写计算属性名即可;
    • 有get和set两个选项,常用的是getter方法,获取数据,也可以使用setter方法改变数据;
  • watch 更像是一个 data 的数据监听回调,当依赖的 data 的数据变化,执行回调,在方法中会传入 newVal 和 oldVal。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性。如果你需要在某个数据变化时做一些事情,使用watch。

  • 相较于methods,不管依赖的数据变不变,methods都会重新计算,但是依赖数据不变的时候computed从缓存中获取,不会重新计算,methods不会。methods是一个方法,它可以接受参数,而computed不能。

10、父子组件之间的传值通信?

  • 父组件向子组件传值:

  • 子组件在props中创建一个属性,用来接收父组件传过来的值;

  • 在父组件中注册子组件;

  • 在子组件标签中添加子组件props中创建的属性;

  • 把需要传给子组件的值赋给该属性

  • 子组件向父组件传值:

  • 子组件中需要以某种方式(如点击事件)的方法来触发一个自定义的事件;

  • 将需要传的值作为$emit的第二个参数,该值将作为实参传给响应事件的方法;

  • 在父组件中注册子组件并在子组件标签上绑定自定义事件的监听。

12、非父子组件之间的通信

常用的方法有 EventBus 和 Vuex

  • EventBus 实现非父子组件通信的原理是:

    • 通过实例化一个Vue对象( 比如bus = new Vue() )作为母线,在组件中通过事件将参数传递出去( bus.$emit(event, [...args]) ),
    • 然后在其他组件中再通过bus来监听此事件并接受参数( bus.$on(event, callback) )。
  • Vuex 是什么:

    • Vuex是一个专为Vue.js应用程序开发的状态管理模式。采用集中式存储管理应用的所有组件的状态

    • Vuex是一个状态管理的插件,可以解决不同组件之间的数据共享和数据持久化。

    • Vuex的用法

posted @ 2019-07-29 21:55  sweetLily819  阅读(1005)  评论(0编辑  收藏  举报