vue在哪个生命周期可以获取和操作DOM

vue从mounted钩子函数开始可以获取和操作dom,此前操作DOM浏览器会报错。

vue生命周期Vue 实例

测试代码如下。在每个钩子函数中添加相应的DOM,测试能否获取及修改DOM。

<template>
  <div id="body">
    <input v-model="test" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      test: "",
    };
  },
  beforeCreate() {
    let body = document.getElementById("body");
    if (body !== null) {
      console.log("beforeCreate 可以获取 DOM");
    } else {
      console.log("beforeCreate 不可以获取 DOM");
    }
    let div = document.createElement("div");
    div.innerHTML = "beforeCreate";
    body.appendChild(div);
  },
  created() {
    let body = document.getElementById("body");
    if (body !== null) {
      console.log("created 可以获取 DOM");
    } else {
      console.log("created 不可以获取 DOM");
    }
    let div = document.createElement("div");
    div.innerHTML = "created";
    body.appendChild(div);
  },
  beforeMount() {
    let body = document.getElementById("body");
    if (body !== null) {
      console.log("beforeMount 可以获取 DOM");
    } else {
      console.log("beforeMount 不可以获取 DOM");
    }
    let div = document.createElement("div");
    div.innerHTML = "beforeMount";
    body.appendChild(div);
  },
  mounted() {
    let body = document.getElementById("body");
    if (body !== null) {
      console.log("mounted 可以获取 DOM");
    } else {
      console.log("mounted 不可以获取 DOM");
    }
    let div = document.createElement("div");
    div.innerHTML = "mounted";
    body.appendChild(div);
  },
  beforeUpdate() {
    let body = document.getElementById("body");
    if (body !== null) {
      console.log("beforeUpdate 可以获取 DOM");
    } else {
      console.log("beforeUpdate 不可以获取 DOM");
    }
    let div = document.createElement("div");
    div.innerHTML = "beforeUpdate";
    body.appendChild(div);
  },
  updated() {
    let body = document.getElementById("body");
    if (body !== null) {
      console.log("updated 可以获取 DOM");
    } else {
      console.log("updated 不可以获取 DOM");
    }
    let div = document.createElement("div");
    div.innerHTML = "updated";
    body.appendChild(div);
  },
  beforeDestroy() {
    let body = document.getElementById("body");
    if (body !== null) {
      console.log("beforeDestroy 可以获取 DOM");
    } else {
      console.log("beforeDestroy 不可以获取 DOM");
    }
    let div = document.createElement("div");
    div.innerHTML = "beforeDestroy";
    body.appendChild(div);
  },
  destroyed() {
    let body = document.getElementById("body");
    if (body !== null) {
      console.log("destroyed 可以获取 DOM");
    } else {
      console.log("destroyed 不可以获取 DOM");
    }
    let div = document.createElement("div");
    div.innerHTML = "destroyed";
    body.appendChild(div);
  },
};
</script>

运行程序,打开界面
在这里插入图片描述
可以看到mounted钩子函数中,JS可以正常添加元素,它之前的钩子函数都会报错。修改文本框内容,触发更新钩子函数,同样可以修改dom。
在代码中添加methods作用域,其中不添加任何方法,再保存使代码重新编译,这样可以在不改变之前逻辑的情况下触发destory。
在这里插入图片描述
可以看到destroyed时仍可以操作DOM。