vue中通过ref获取到元素了,用什么来改变内容啊?

图片描述

图片描述

报错就是图上所示,告诉我innerHTML是undefined。这是什么情况啊?

阅读 14.3k
2 个回答

不是innerHTMLundefined,而是this.$refs.noticeContentLaterundefined。你并没有获取到元素。

------------------------------更新答案----------------------------
获取子元素变量的方法由很多种,你使用this.$refs并没有错, 但是子组件要及时更新对应变量。例如:

子组件

<template>
  <div id="main">example</div>
</template>
<script>
export default {
  data () {
    return {
      noticeContentLater: null
    }
  },
  update: function () {
    this.noticeContentLater = document.getElementById('main')
  }
}
</script>

同样也可以使用监听事件的方法, 例如在子组件update种触发父组件监听的事件,更新变量,这样就需要this.$refs了。如:

父组件

<template>
  <div id="app">
    <child @updateDom="fUpdate"></child>
  </div>
</template>
<script>
export default {
  data () {
    return {
      myDom: null
    }
  },
  method: {
    fUpdate: function (element) {
      this.myDom = element
    }
  }
}
</script>

子组件

<template>
  <div id="main">example</div>
</template>
<script>
export default {
  update: function () {
    this.$emit('updateDom', document.getElementById('main'))
  }
}
</script>

当然,不管如何,感觉Vue并没有直接操作Dom元素的必要,想要更新元素的属性,提前绑定好就可以了。

Vue获取dom时,最好在mounted里用$nextTick,在页面渲染后dom更新时。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题