当前位置:主页 > 网页前端 > vue >

Element框架el-tab点击标签页时再渲染问题的解决

时间:2022-11-28 10:28:45 | 栏目:vue | 点击:

之前一直以为这种标签页加载时要么同时渲染,加载所有页面;要么通过el-tab的@tab-click事件,通过判断tab.name选择加载。但是后者有两个弊端:(1)页面仍然一下子渲染,向后台请求许多接口,造成页面加载缓慢,无法实现实时渲染的效果(2)不能解决父子组件数据传递的问题)

1. 父子组件数据传递问题:

<!--父组件-->
<el-tabs v-model="activeName" @tab-click="handleClick">
    <el-tab-pane label="我的行程" name="1">
        <child :asyncData="asyncData"></child>
    </el-tab-pane>
    <el-tab-pane label="消息中心" name="2">配置</el-tab-pane>
</el-tabs>
//子组件
export default{
    data(){
        return{
            asyncArray:[]
        }
    },
    props:{
        asyncData : Array
    },
    mounted(){
        this.asyncArray = this.asyncData || []
    }
}

上面的例子中,父组件调用子组件child,同时向子组件传递了一个数组asyncData,且变量asyncData的值是由接口请求返回的。

子组件在mounted中使用由父组件传递的asyncData,但是在mounted时,父组件的接口还没有返回所需的数据,因此asyncData返回值为undefined,导致子组件中的asyncArray被赋值为空数组。即使后面接口返回了所需的数据,子组件中可以取得asyncData的正常值。但由于asyncArray已被赋值为空数组,与asyncData指向的不是同一个地址,所以asyncArray的值依然是空数组。

2.lazy属性

在element官网中发现了lazy属性:

在默认值为false的情况下,标签页里的内容与标签是同时渲染的,未展开的标签页时display:none;当更改为true以后,未展开的标签页并不会渲染,二十等切换之后才会渲染,这样不仅实现了实时加载标签页内容的效果,同时也有足够的时间等待接口返回数据。

您可能感兴趣的文章:

相关文章