Vue $el 对象


示例

使用 $el 对象更改根级别上 <div> 标签的背景颜色。

methods: {
  changeColor() {
    this.$el.style.backgroundColor = 'lightgreen';
  }
}
运行示例 »

请参阅下面的更多示例。


定义和用法

$el 对象表示 Vue 组件的根 DOM 节点。

在挂载 Vue 应用程序之前,$el 对象不存在。

如果 <template> 中只有一个 HTML 根元素:

  • $el 对象将是该根元素。
  • 可以使用 $el 对象直接操作 DOM(请参见上面的示例),但不建议这样做。
  • 最好使用 Vue ref 属性和其他 Vue 功能以声明方式更改 DOM,因为它会使代码更加一致且更易于维护( 参见下面的示例 1)。

如果 <template> 中有多个 HTML 根元素:

  • $el 对象只是 Vue 内部使用的占位符 DOM 文本节点(而不是实际的 DOM 元素)。
  • 当存在多个根元素时,无法使用 $el 对象操作 DOM(请参见下面的示例 2)。

注意:在 Vue 3 的 Composition API 中,<script setup> 中无法访问 $el 属性(使用 setup 函数)。


更多示例

示例 1

按照建议使用 ref 属性以声明方式更改 <div> 标签的背景颜色,而不是使用 $el 对象。

<template>
  <div ref="rootDiv">
    <h2>Example $el Object</h2>
    <p>建议使用 ref 属性而不是 $el 对象来更改根 DIV 标签的背景颜色,这样更一致。</p>
    <button v-on:click="changeColor">Click here</button>
  </div>
</template>

<script>
export default {
  methods: {
    changeColor() {
      this.$refs.rootDiv.style.backgroundColor = 'lightgreen';
    }
  }
}
</script>
运行示例 »

示例 2

如果 <template> 的根中有多个元素,则 $el 对象将只是第一个元素的文本节点表示(而不是实际的 DOM 元素) 根元素的元素,由 Vue 内部使用。

在这种情况下,我们无法使用 $el 对象来操作 DOM。

<template>
  <div>
    <h2>示例 $el 对象</h2>
    <p>当根级别上有其他标签时,我们无法使用 $el 对象来更改根 DIV 标签的背景颜色。 打开浏览器控制台查看生成的错误。</p>
    <button v-on:click="changeColor">Click here</button>
  </div>
  <p>通过这个额外的 p 标签,根级别上有两个标签。</p>
</template>

<script>
export default {
  methods: {
    changeColor() {
      this.$el.style.backgroundColor = 'lightgreen';
    }
  }
}
</script>

<style>
#app > div, #app > p {
  border: solid black 1px;
  padding: 10px;
}
</style>
运行示例 »

示例 3

使用 $el 对象更改 <h2> 子元素的背景颜色。

<template>
  <div>
    <h2>Example $el Object</h2>
    <p>Using the $el object to change the background color of the H2 child element.</p>
    <button v-on:click="changeColor">Click here</button>
  </div>
</template>

<script>
export default {
  methods: {
    changeColor() {
      this.$el.children[0].style.backgroundColor = 'lightblue';
    }
  }
}
</script>
运行示例 »

相关页面

Vue 教程:Vue 模板参考

Vue 教程:Vue 方法

Vue 参考:Vue 'ref' 属性

Vue 参考:Vue $refs 对象