computed: 是计算属性,依赖其它属性值,而且 computed 的值有缓存,只有它依赖的属性值发生改变,下一次获取 computed 的值时才会从新计算 computed 的值;vue
watch: 更多的是「观察」的做用,相似于某些数据的监听回调 ,每当监听的数据变化时都会执行回调进行后续操做;面试
运用场景:vue-router
能够在钩子函数 created、beforeMount、mounted 中进行调用,由于在这三个钩子函数中,data 已经建立,能够将服务端端返回的数据进行赋值。可是本人推荐在 created 钩子函数中调用异步请求,由于在 created 钩子函数中调用异步请求有如下优势:浏览器
Vue 组件间通讯是面试常考的知识点之一,这题有点相似于开放题,你回答出越多方法固然越加分,代表你对 Vue 掌握的越熟练。Vue 组件间通讯只要指如下 3 类通讯:父子组件通讯、隔代组件通讯、兄弟组件通讯,下面咱们分别介绍每种通讯方式且会说明此种方法可适用于哪类组件间通讯。缓存
(1)props / $emit
适用 父子组件通讯服务器
这种方法是 Vue 组件的基础,相信大部分同窗耳闻能详,因此此处就不举例展开介绍。异步
(2)ref
与 $parent / $children
适用 父子组件通讯ide
ref
:若是在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;若是用在子组件上,引用就指向组件实例$parent
/ $children
:访问父 / 子实例(3)EventBus ($emit / $on)
适用于 父子、隔代、兄弟组件通讯函数
这种方法经过一个空的 Vue 实例做为中央事件总线(事件中心),用它来触发事件和监听事件,从而实现任何组件间的通讯,包括父子、隔代、兄弟组件。this
(4)$attrs
/$listeners
适用于 隔代组件通讯
$attrs
:包含了父做用域中不被 prop 所识别 (且获取) 的特性绑定 ( class 和 style 除外 )。当一个组件没有声明任何 prop 时,这里会包含全部父做用域的绑定 ( class 和 style 除外 ),而且能够经过 v-bind="$attrs"
传入内部组件。一般配合 inheritAttrs 选项一块儿使用。$listeners
:包含了父做用域中的 (不含 .native 修饰器的) v-on 事件监听器。它能够经过 v-on="$listeners"
传入内部组件(5)provide / inject
适用于 隔代组件通讯
祖先组件中经过 provider 来提供变量,而后在子孙组件中经过 inject 来注入变量。 provide / inject API 主要解决了跨级组件间的通讯问题,不过它的使用场景,主要是子组件获取上级组件的状态,跨级组件间创建了一种主动提供与依赖注入的关系。
(6)Vuex 适用于 父子、隔代、兄弟组件通讯
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。每个 Vuex 应用的核心就是 store(仓库)。“store” 基本上就是一个容器,它包含着你的应用中大部分的状态 ( state )。
vue-router 有 3 种路由模式:hash、history、abstract,对应的源码以下所示:
switch (mode) { case 'history': this.history = new HTML5History(this, options.base) break case 'hash': this.history = new HashHistory(this, options.base, this.fallback) break case 'abstract': this.history = new AbstractHistory(this, options.base) break default: if (process.env.NODE_ENV !== 'production') { assert(false, `invalid mode: ${mode}`) } } 复制代码
其中,3 种路由模式的说明以下: