Vue $el 对象

实例

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

  1. methods: {
  2. changeColor() {
  3. this.$el.style.backgroundColor = 'lightgreen';
  4. }
  5. }

定义与用法

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

$el 对象在 Vue 应用程序安装之前不存在。

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

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

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

  • $el 对象将只是 Vue 内部使用的占位符 DOM 文本节点(而不是实际的 DOM 元素)。
  • 当存在多个根元素时,不能使用 $el 对象来操作 DOM(请参见下面的实例2)。
注意:在 Vue 3 的 Composition API 中,$el 属性在 <script setup> 中不可访问(使用 setup 函数)。

更多实例

实例 1

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

  1. <template>
  2. <div ref="rootDiv">
  3. <h2>Example $el Object</h2>
  4. <p>It is recommended, and more consistent, to use the ref attribute instead of the $el object to change the background color root DIV tag.</p>
  5. <button v-on:click="changeColor">Click here</button>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. methods: {
  11. changeColor() {
  12. this.$refs.rootDiv.style.backgroundColor = 'lightgreen';
  13. }
  14. }
  15. }
  16. </script>
实例 2

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

  1. <template>
  2. <div>
  3. <h2>Example $el Object</h2>
  4. <p>We are not able to use the $el object to change the background color of the root DIV tag when there are other tags on the root level. Open browser console to see the error generated.</p>
  5. <button v-on:click="changeColor">Click here</button>
  6. </div>
  7. <p>With this extra p-tag there are two tags on the root level.</p>
  8. </template>
  9. <script>
  10. export default {
  11. methods: {
  12. changeColor() {
  13. this.$el.style.backgroundColor = 'lightgreen';
  14. }
  15. }
  16. }
  17. </script>
  18. <style>
  19. #app > div, #app > p {
  20. border: solid black 1px;
  21. padding: 10px;
  22. }
  23. </style>
实例 3

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

  1. <template>
  2. <div>
  3. <h2>Example $el Object</h2>
  4. <p>Using the $el object to change the background color of the H2 child element.</p>
  5. <button v-on:click="changeColor">Click here</button>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. methods: {
  11. changeColor() {
  12. this.$el.children[0].style.backgroundColor = 'lightblue';
  13. }
  14. }
  15. }
  16. </script>

分类导航