javascript - 找到合适的时机访问从异步调用的数据创建的 DOM 元素
问题描述
我有一个从异步调用的数据创建的项目列表,我想滚动到特定元素。因此,我需要在准备好之后访问 DOM。
我尝试了以下解决方案:
HTML:
<div id="app">
<v-app>
<div id='scrollableDiv'>
<p v-for='item in items' :id='item.id'>{{item.title}}</p>
</div>
</v-app>
</div>
JavaScript:
new Vue({
el: '#app',
async created () {
response = await axios.get('https://jsonplaceholder.typicode.com/todos')
this.items = response.data
const selectedElement = document.getElementById('5')
this.scrollTo(selectedElement)
},
data: () => ({
items: []
}),
methods: {
scrollTo (selectedElement) {
const scrollableDiv = document.getElementById('scrollableDiv')
scrollableDiv.scrollTop = selectedElement.offsetTop
}
}
})
这不起作用,因为document.getElementById('5')
在 DOM 准备好之前调用。
document.getElementById('5')
当 DOM 准备好并且 ID 为 '5' 的元素存在时如何执行?
解决方案
从响应中更新后this.items
,您需要让 Vue 有机会识别更改并相应地更新 DOM
this.items = response.data
await this.$nextTick()
const selectedElement = document.getElementById('5')
或使用回调的等价物
推荐阅读
- c++11 - 无法使用类实现调试 c++ 程序
- mysql - 如何在 mysql 数据库中获取组的开始和结束预订日期?
- ios - 如何使用 QRCode 从 Microsoft 公司门户/Intune 应用程序下载应用程序
- excel - “ALL”- BY 选项(SAS PROC TABULATE)
- javascript - 滚动标题
- azure-devops - 可以自定义 Azure DevOps 项目吗?
- reactjs - 当 Chrome 开发工具打开时,样式化组件内的图像重新渲染
- c - C - 相当于 Lua 的 math.rad
- python - Python中的二进制搜索无法正常工作,仅显示列表中的某些项目
- node.js - X-Powered-By:微服务中的头盔