将 Vue 对象附加到元素的最推荐语法是啥?

Posted

技术标签:

【中文标题】将 Vue 对象附加到元素的最推荐语法是啥?【英文标题】:Which is the most recommended syntax for attaching Vue object to an element?将 Vue 对象附加到元素的最推荐语法是什么? 【发布时间】:2017-04-21 04:50:40 【问题描述】:

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

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

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

按属性引用。

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

通过方法调用。

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

【问题讨论】:

【参考方案1】:

从documentation 看来,$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)
  

【讨论】:

不错,我也看过那段话。也许我的问题措辞不当。我应该以没有未安装的实例为目标吗?我应该尝试达到相反的效果吗?有关系吗?有什么意义吗?最常见的是什么?我有我的看法,但它基于 C# 和那里的配置。 @KonradViltersten 我认为这并不重要,重要的是您是否有一些未安装实例的用例,您希望在不同的 HTML 元素上安装相同的组件。我已经更新了我的答案,看来 vue 内部使用 $mount 来挂载组件,$el 是为了方便用户,因为传递哈希总是很容易。

以上是关于将 Vue 对象附加到元素的最推荐语法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

将对象列表从 c# 传递到糟糕的 c++ win32 本机 dll 的最有效方法是啥?

使用 vue 将输入元素附加到表单字段集

在文件中存储对象/充满对象的地图的最简单方法是啥?

在 Hibernate 中重新附加分离对象的正确方法是啥?

在 OpenGL 中绘制 3d 图形的最有效方法是啥?

JavaScript - 如何合并/附加到对象/数组 - ReactJS - 传播语法