前言
代码及效果
app.vue
- 相当于页面首页
<template>
<div id="app">
<!-- 假设为页头内容,导航等...-->
<div class="routers">
<router-link :to="item.path" v-for="item in routerLinks" :key="item.name">{{ item.name }}</router-link>
</div>
<!-- 内容区域 -->
<div class="content">
<router-view />
</div>
</div>
</template>
<script>
export default {
data() {
return {
routerLinks: [],
};
},
created() {
this.handleRouterLink();
},
methods: {
handleRouterLink() {
// 获取所有路由配置
this.routerLinks = this.$router.getRoutes();
},
},
};
</script>
<style lang="scss" scoped>
#app {
height: 100vh;
display: flex;
flex-direction: column;
}
.routers {
display: flex;
justify-content: space-around;
}
/* 确定内容高度,好让业务组件的 height:100%生效 */
.content {
flex: 1;
}
</style>
test.vue
<!-- 表格高度自适应 -->
<template>
<div class="wrapper">
<!-- 查询条件 -->
<div class="searchView">
<div class="formItem" v-for="(item, index) in formNum" :key="index"></div>
</div>
<!-- 表格 -->
<div class="tableView" :key="tableKey">
<el-table :data="tableData" ref="myTable" style="width: 100%" :height="tableHeight">
<el-table-column prop="date" label="日期" width="180"> </el-table-column>
<el-table-column prop="name" label="姓名" width="180"> </el-table-column>
<el-table-column prop="address" label="地址"> </el-table-column>
</el-table>
</div>
<!-- 分页 -->
<div class="pageView">
<el-pagination
:pager-count="5"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="currentPage2"
:page-sizes="[100, 200, 300, 400]"
:page-size="100"
layout="sizes, prev, pager, next"
:total="1000"
>
</el-pagination>
</div>
</div>
</template>
<script>
export default {
data() {
return {
// 表格key,当表格height变化时,el-table无法重新渲染,只能刷新key,强制渲染表格组件
tableKey: 0,
// 当前页数
currentPage2: 1,
// 查询条件数量
formNum: 4,
// 表格高度
tableHeight: 500,
// 表格数据
tableData: [
{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄',
},
{
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄',
},
{
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄',
},
{
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄',
},
],
};
},
async mounted() {
this.handleTableHeight();
// 当浏览器大小修改时,同时动态修改表格高度
window.onresize = this.getDebounce(this.handleTableHeight, 500);
},
methods: {
// 处理表格高度修改事件
async handleTableHeight() {
this.tableHeight = 0;
await this.$nextTick();
const tableView = document.querySelector('.tableView');
this.tableHeight = tableView.clientHeight;
console.log('tableHeight', this.tableHeight);
this.tableKey++;
},
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
},
// 生成一个debounce函数,避免事件频繁除法
getDebounce(func, delay) {
let timer = null;
return function (...args) {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
func.apply(this, args);
}, delay);
};
},
},
};
</script>
<style lang="scss" scoped>
/* 以下样式皆可写到全局文件中,每个页面布局基本一致 */
.wrapper {
display: flex;
flex-direction: column;
height: 100%;
.searchView {
display: flex;
flex-wrap: wrap;
gap: 10px 20px;
.formItem {
width: 230px;
height: 30px;
border: 1px solid #000;
}
}
.tableView {
flex: 1;
}
}
</style>
效果
思路
- 首先整个内容主页面
.wrapper
肯定是flex
,并且纵向布局,高度100%。- 其次,我们要分别在
查询条件、表格、分页
外层套一层div
,这样好进行样式管理。- 内容主页面肯定主要展示的是表格,那么我们就给表格外层的div
tableView
设置flex: 1;
,占据剩余所有高度- 当页面加载完成的时候,由于是
flex
布局,表格的高度(剩余高度)就是wrapper的高度100% - searchView的高度 - pageView的高度
。- 然后我们在
mounted
钩子函数中,获取.tableView
div的clientHeight
高度,这个值,就能作为表格的高度了。- 最后我们把这个高度值赋值给表格
el-table的height
属性,并且刷新key
,强制表格重新渲染以达到效果。- 最最后,我们给
window.onresize
绑定了事件,并且优化了使用防抖,当浏览器大小修改的时候,页面也会动态自适应高度。
原文地址:https://blog.csdn.net/qq_57404736/article/details/134764844
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_36328.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。