# 面试 **Repository Path**: qf-2201/interview ## Basic Information - **Project Name**: 面试 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-04-26 - **Last Updated**: 2022-04-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 组件传值 - 父传子 - 子组件使用props接收,父组件在子组件标签上,传入props里面定义的属性 - 子传父 - 子组件使用$emit方法,抛出一个事件,然后在组件的标签上,监听对应抛出的事件,$emit 第二个参数就是传出去的值 - 兄弟组件传值 - eventbus、vuex ## 计算属性(computed) - 模板中放入太多的逻辑会让模板过重且难以维护,使用计算属性可以让模板变得简洁易于维护。计算属性是基于它们的响应式依赖进行缓存的,计算属性比较适合对多个变量或者对象进行处理后返回一 个结果值,也就是数多个变量中的某一个值发生了变化则我们监控的这个值也就会发生变化 - 使用场景 - 如果有一些对性能开销较大的复杂性计算,则可以放到计算属性里面,利用它的缓存优化性能 ## 观察者(watch) - 使用watch来侦听数据的变化,watch中的属性一定是data 中已经存在的数据。 - 使用场景 - 如果这个数据变化需要做出某些操作的时候,就可以使用watch去异步的做某些事情 ## v-if 和 v-show的区别 - v-if直接不渲染这个元素 - v-show只是在display层面做none操作 ## v-for 里面不能写 v-if - 因为v-for比v-if优先级更高,所以如果在v-for里面使用 v-if的话,会有性能问题 ## computed 内部是如何实现这个缓存的 - dirty ## 使用v-for的时候为什么要加key - xxx ## 为什么有时候我改变数据的时候视图没有变化 - 在vue里面监听数据变化,是一个浅层次的监听(会监听三才能),所以当我们的数据结构过于复杂的时候,vue可能监听不到变化,那么就需要我们手动去通知视图更新可以$forceUpdate ## 计算属性和观察者区别 - 计算属性有缓存,而watch没有缓存 ## 如何自定指令 - 全局 Vue.directive 进行注册,第一个参数是指令名,后面是指令对应的钩子函数 - 局部 directives 这个对象里面注册 ## MVVM - vue是基于mvvm架构去实现的一个框架,专注于视图层。它的核心是 MVVM 中的 VM,也就是 ViewModel。 ViewModel负责连接 View 和 Model,保证视图和数据的一致性。Vue会通过DOM Listeners来监听并改变Model层的数据。反之,当Model层的数据发生改变时,也会通过Data Bingings来监听并改变View层的展示。从而实现双向数据绑定的功能。 ## v-model 具体怎么实现的(简单实现) - 监听表单控件的变化事件,然后把变化的结果同步给model