返回

Vue 实例挂载过程剖析

前端

面试官:谈谈Vue实例挂载的过程

思考

我们都听过知其然知其所以然这句话。那么不知道大家是否思考过 new Vue()这个过程中究竟做了些什么?过程中是如何完成数据的绑定,又是如何将数据渲染到视图的等等。

分析

首先找到 Vue 这个构造函数,可以从 vue.esm.js 找到

export default function Vue (options) {
  if (!(this instanceof Vue)) {
    warn('Vue is a constructor and should be called with the `new` keyword');
  }
  this._init(options)
}

可以看出 Vue 是一个构造函数,在初始化的时候需要传入一个 options 参数。这个 options 参数是一个对象,里面包含了一些配置项,比如 el、data、methods 等。

挂载过程

Vue.prototype._init = function (options) {
  const vm = this
  // 对options参数进行一些列验证操作,这里忽略这些操作,我们直接进入vm._init()的后续逻辑

  vm.$options = options

  // 如果是跟元素,需要初始化template
  if (vm.$options.el) {
    vm.$mount(vm.$options.el)
  }
}

vm._init() 方法中,会对 options 参数进行一些列验证操作,这里我们忽略这些操作,直接进入 vm._init() 的后续逻辑。

  1. 将 options 赋值给 vm.$options,以便后续使用。

  2. 如果 vm.$options.el 存在,则说明这是一个根元素,需要初始化模板。调用 vm.$mount(vm.$options.el) 方法。

数据绑定

数据绑定是 Vue 的核心功能之一。它允许我们在组件中使用数据,并在数据发生变化时更新视图。

在 Vue 中,数据绑定是通过 v-model 指令实现的。v-model 指令可以将一个表单元素(如 input、select 等)与组件的数据进行绑定。当表单元素发生变化时,组件的数据也会随之发生变化。

视图渲染

视图渲染是 Vue 的另一个核心功能。它允许我们在组件中创建动态的视图。

在 Vue 中,视图渲染是通过 template 标签实现的。template 标签可以定义组件的视图结构。当组件的数据发生变化时,template 标签中的内容也会随之发生变化。

总结

Vue 实例挂载的过程是一个复杂的过程,涉及到初始化、数据绑定、视图渲染等多个步骤。通过了解这个过程,我们可以更好地理解 Vue 的工作机制,并编写出更健壮、更易维护的 Vue 应用程序。