5

将 Vue 实例附加到 HTML 元素时,我可以通过两种方式进行。

  1. 通过属性引用,el:"#rooty"
  2. 通过方法调用,$mount("#rooty")

我无法在他们之间做出决定。它们是否完全等价?如果一个更新或过时,推荐哪一个?还有其他区别吗?在这种情况下,会是什么?

通过属性引用。

const app = new Vue({
  store,
  router,
  el: "#rooty",
  ...
});//.$mount("#rooty");

通过方法调用。

const app = new Vue({
  store,
  router,
  //el: "#rooty",
  ...
}).$mount("#rooty");
4

1 回答 1

4

正如从文档中看到的那样,目的$mount()是有一个未安装的 vue 实例并在以后安装它。从文档:

如果 Vue 实例在实例化时没有收到 el 选项,它将处于“未安装”状态,没有关联的 DOM 元素。vm.$mount() 可用于手动启动未挂载的 Vue 实例的挂载。


我相信el:"#rooty"这只是提供给用户的语法糖,$mount因为内部$mount用于将实例附加到 HTML 元素。从vue repo中查看以下代码:

export function initRender (vm: Component) {
  ...
  ...
  // bind the createElement fn to this instance
  // so that we get proper render context inside it.
  // args order: tag, data, children, needNormalization, alwaysNormalize
  // internal version is used by render functions compiled from templates
  vm._c = (a, b, c, d) => createElement(vm, a, b, c, d, false)
  // normalization is always applied for the public version, used in
  // user-written render functions.
  vm.$createElement = (a, b, c, d) => createElement(vm, a, b, c, d, true)
  if (vm.$options.el) {
    vm.$mount(vm.$options.el)
  }
}
于 2016-12-06T14:22:22.467 回答