dom vue 加载完 执行_vue动态加载组件mounted无法获取dom的解决思路

当在Vue的mounted钩子中尝试通过ID获取DOM元素时,由于Vue的渲染机制,可能在nextTick中仍然无法获取到。解决这个问题,可以利用Vue的自定义指令(v-lazydom)结合inserted钩子,在元素真正插入到文档时进行操作。这样可以在元素可用时执行处理,避免直接使用setTimeout。若需要处理多个元素,可通过元素的id或tag进行区分。
摘要由CSDN通过智能技术生成

有时我们在mouted方法中想通过id读取到一个dom元素,虽然官方并不推荐这种方法来操作dom。但难免有碰到这种情况,如下面

1fd503ce182847c7303524ae9c0aa697.png

一个dom元素

7d57230ad2060d8cdbe8ca99c18c8dbc.png

试图在mouted中获取 试图在nextick中获取 结果还是为空

究其原因,还是该dom元素未在文档中生成。所以用document.getelementId 是无法获取到该元素的

解决方法

在vue文档中 关于的自定义指示器中有这么一段话

d000f199597a7b4ec263847abd2e0bd6.png

通过自定义指示器的insertd hook 我们可以捕获该元素被插入到父节点的时刻,做进一步处理

于是我们可以封装这么一个directive

99380a56a0a07b7f00b51f895b67104e.png

然后在你需要捕获的dom元素中写入v-lazydom

667a7e3845a7cdf8ffffcaa2e382b150.png

只要在你包含该元素的组件中 定义一个lazyready 方法 便可获取到该元素

d279307f91da9ecabb4c131c6d0a7e49.png

至少显得比直接使用settimeout干净点

如果你有多个元素需要捕获 的话,lazyready会触发多次,这时你可以通过捕获元素的id或者tag来区分,就不展开了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值