关于vue异步更新dom节点与innerText不一致问题

发布于 2022-09-13 00:58:00 字数 803 浏览 22 评论 0

代码:

<template>
  <div>
    <div id="msg" ref="msg">{{ msg }}</div>
    <button @click="onChange">更新msg</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      msg: "hello",
    };
  },

  created() {},

  methods: {
    onChange() {
      this.msg = "hello world";
      console.log(this.$refs.msg);
      console.log(this.$refs.msg.innerText);

      this.$nextTick(() => {
        // 节点已更新, 文本变成新的值
        console.log(this.$refs.msg); // <div>hello world</div>
        console.log(this.$refs.msg.innerText); // hello
      });
    },
  },
};
</script>

运行结果如同

说是异步更新,为什么打印出来的dom节点是已经更新的结果而访问innerText确是原来的结果呢? 求教

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

送舟行 2022-09-20 00:58:00

打印的时候 innerText 还没有修改,而打印 DOM 元素显示的直接是该元素的引用,里面的内容在你点击展开的时候更新了,跟console.log输出对象、数组时的现象如出一辙。
可以试试把 console.log(this.$refs.msg) 改成:

console.log(this.$refs.msg.outerHTML);

outerHTML 里应该也是 hello

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文