【前端--面试】常见面试题(九)—— Vue

399 阅读2分钟

这是我参与8月更文挑战的第21天,活动详情查看:8月更文挑战

最近沉迷于 你是我的荣耀,下载了一年多不玩的游戏,沉迷于于途大神和晶晶女神的绝世容颜里,总是会忘记写文章ε=(´ο`*)))唉~

vue生命周期的理解

生命周期是指一个实例从开始创建到销毁的这个过程:

  • beforeCreate() 在实例创建之间执行,数据未加载状态
  • created() 在实例创建、数据加载后,能初始化数据,dom渲染之前执行
  • beforeMount() 虚拟dom已创建完成,在数据渲染前最后一次更改数据
  • mounted() 页面、数据渲染完成,真实dom挂载完成
  • beforeUpadate() 重新渲染之前触发
  • updated() 数据已经更改完成,dom 也重新 render 完成,更改数据会陷入死循环
  • beforeDestory() 和 destoryed() 前者是销毁前执行(实例仍然完全可用),后者则是销毁后执行

组件通信

父组件向子组件通信: 子组件通过 props 属性,绑定父组件数据,实现双方通信。

子组件向父组件通信: 将父组件的事件在子组件中通过 $emit 触发

非父子组件、兄弟组件之间的数据传递:

// 新建一个Vue实例作为中央事件总嫌
let event = new Vue();

// 监听事件
event.$on('eventName', (val) => {
    //......do something
});

// 触发事件
event.$emit('eventName', 'this is a message.')

 vue-router 使用params与query传参的区别

// 传递
this.$router.push({path: './xxx', params: {xx:xxx}})
this.$router.push({path: './xxx', query: {xx:xxx}})

// 接收
this.$route.params

this.$route.query
  • params 是路由的一部分,必须要有。query 是拼接在 url 后面的参数,使用params进行传参,不能用path,要用name,否则接收不到参数的,
  • params 不设置的时候,刷新页面或者返回参数会丢,query 则不会有这个问题

Class 与 Style 如何动态绑定?

Class

1、对象方法 :class="{'orange': isRipe, 'green': isNotRipe}" 2、数组方法 :class="[class1, class2]" 3、行内 :style="{color: color, fontSize: fontSize+'px'}"

Stlye

1、对象方法 :style="{ color: activeColor, fontSize: fontSize + 'px' }" 2、数组方法 :style="[styleColor,styleSize]"

computed和 watch 的区别

computed: :计算属性,依赖其它属性值,并且 computed 的值有缓存,只有它依赖的属性值发生改变,下一次获取 computed 的值时才会重新计算 computed 的值;

watch:  :更多的是观察的作用,类似于某些数据的监听回调 ,每当监听的数据变化时都会执行回调然后进行后续操作;

运用场景:

1、当我们需要进行数值计算,并且依赖于其它数据时,应该使用 computed,因为可以利用 computed 的缓存特性,避免每次获取值时,都要重新计算;

2、当我们需要在数据变化时执行异步或开销较大的操作时,应该使用watch,使用watch选项允许我们执行异步操作 ( 访问一个API),限制我们执行该操作的频率,并在我们得到最终结果前,设置中间状态。这些都是计算属性无法做到的。