You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue 2中如何判断HTML是否已完全加载?

解决DOM未完全加载导致分页按钮失效的问题

你的核心问题在于:Vue的DOM更新是异步执行的,你在调用$forceUpdate()后立刻通过finally隐藏加载模态框,但此时表格的DOM还没真正渲染完成,分页组件处于未就绪状态,所以会出现几秒内无法操作的冻结情况。

判断DOM完全加载的方法 & 解决方案:

  • 用Vue的$nextTick()等待DOM更新完成
    Vue修改数据后,不会立刻更新DOM,而是将所有数据更新任务攒到一个事件循环中批量处理。$nextTick()的回调函数会在DOM完全更新完成后执行,这时再隐藏模态框,就能确保表格和分页组件都已渲染就绪。

修改你的代码,把隐藏模态框的逻辑移到$nextTick()内:

get_products_by_page(page_go_to){
    document.getElementById('modal-loading').style.display = 'block';
    axios.post('/intranet2/pedidos/search_data_product_stock_v2', {
        id_products: this.id_products[page_go_to], id_supplier_selected: this.id_supplier_selected, range_min: this.range_min, range_max: this.range_max
    }).then(function(response) {

        if(response.data.length != 0){
            this.current_page   = page_go_to;
            this.data_products  = response.data;

            // 触发更新后,用$nextTick等待DOM渲染完成
            this.$nextTick(() => {
                try {
                    for (var i = 0; i < this.data_products.length; i++) {
                        document.getElementById('row'+this.data_products[i].id_product).style.backgroundColor='#FFFFFF';
                    }
                } catch (error) {
                  //console.error(error);
                }
                // DOM就绪后再隐藏模态框
                document.getElementById('modal-loading').style.display = 'none';
            });
            
        }else{
            this.data_products = [];
            this.number_pages   = 0;
            this.total_products = 0;

            $.notify('Sin resultados.', 'info');
            // 无数据时直接隐藏模态框
            document.getElementById('modal-loading').style.display = 'none';
        }

    }.bind(this), function(response) {
        $.notify('Error al buscar productos.');
        document.getElementById('modal-loading').style.display = 'none';
    });
},
  • 替换手动DOM操作(可选但推荐)
    你代码里手动修改行背景色的逻辑,可改用Vue的动态样式绑定实现,避免直接操作DOM,也能减少DOM未就绪的报错:
    在表格行标签中添加动态样式绑定:
<tr :id="'row' + item.id_product" :style="{ backgroundColor: '#FFFFFF' }">

这样无需在JS里循环查找DOM元素,Vue会自动处理样式,也不会出现找不到DOM的情况。

  • 分页组件的适配(若有需要)
    如果分页组件是第三方库或自定义组件,确保它监听了data_products或current_page的变化,在数据更新后重新初始化;如果是自研的分页逻辑,也要把分页按钮的事件绑定放在$nextTick()之后,确保DOM元素已存在。

内容的提问来源于stack exchange,提问作者Michu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:05:22