vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue动态显示表格内容

Vue中如何动态显示表格内容

作者:橙子微笑

这篇文章主要介绍了Vue中如何动态显示表格内容问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

在项目中,我们可能会用到表格来显示不同的数据,表格显示数据,无非是列的内容不同,所以,我们可以考虑封装个公共的表格组件,动态得显示不同的数据

实现截图

如下:

在项目中创建一个公共表格组件table.vue

代码如下

<template>
	<!--这里放其他内容,表格等-->
	<el-table :data="tableData" border  style="width: 100%;"
	 v-loading="tableLoading" >
		<el-table-column  align="center" v-for="(th, key) in tableColumnsConfig" :key="key" 
		:prop="th.prop" :label="th.label"
		 :width="th.width"  :show-overflow-tooltip="true" >
			<template slot-scope="scope">
				<div v-if="th.prop==''&&th.type=='index'">
					{{scope.$index+(cpage - 1) * psize + 1}}
				</div>
				<div v-else-if="th.prop==''">
					<el-button  :type="btn.type=='del'?'danger':'primary'" v-for="(btn,index) in th.operate"  size="mini" :key="index" 
					 @click="btnHandle(scope.row,btn.type)">
						{{btn.name}}
					</el-button>
				</div>
				<div v-else>
					<span>{{ scope.row[th.prop] }}</span>
				</div>
			</template>
		</el-table-column>
	</el-table>
</template>
<script>
	export default {
		name: 'refactor_table',
		props: {
			tableData: {
				type: Array,
				default: function() {
					return []
				}
			},
			/**
			 *  设置table 加载icon
			 */
			tableLoading: {
				type: Boolean,
				default: false
			},
			tableColumnsConfig: {
				type: Array,
				default: function() {
					return []
				}
			}
		},
		data(){
			return{
				cpage:1,
				psize:10,
			}
		},
		mounted(){
			/* if(this.tableData && this.tableData.length>0){
				this.tableLoading=false;
			} */
			/* console.log(this.tableColumnsConfig); */
		},
		methods: {
			btnHandle(row, type) {
				this.$emit("operateHandle", row, type)
			}
		}
	}
</script>

<style>
	
</style>

在建一个父组件

引入子组件table.vue,并把动态获取的表格数据传给table.vue

<template>
	
	<div>
		<refactor-table :table-data="tableData" :table-columns-config="tableColumns" 
		:table-loading="loading" @operateHandle="tableOperateHandle">
		</refactor-table>
		<pagination :currentPage="currentPage" :limit="limit" :total="total" :small="small"></pagination>
	</div>
</template>

<script>
	import RefactorTable from './sub/table.vue';
	import Pagination from '@/components/Pagination/index.vue'
	export default {
		data() {
			return {
				loading: false,
				tableHeight: 300,
				tableData: [],
				tableColumns: [
					{
						label: '序号',
						width: '50',
						prop: '',
						type:"index"
					},
					{
						label: '节点id',
						width: '',
						prop: 'id'
					},
					{
						label: '农户名称',
						width: '',
						prop: 'name',
					},
					{
						label: '所属中心店',
						width: '',
						prop: 'grade',
					},
					
				],
				currentPage: 1,
				limit: 10,
				total: 0,
				small: true
			}
		},
		created() {
			this.loadingTable();
		},
		methods: {
			loadingTable() {
				// 初始化table 数据
				this.tableData = [{
						id: '1938238',
						name: '节点',
						grade: 'ERWFD'
					},
					{
						id: '3241',
						name: '节点B',
						grade: 'FDD'
					},
					{
						id: '8238',
						name: '节点C',
						grade: 'FVDFA'
					},
					{
						id: '3424',
						name: '节点',
						grade: 'ERWFD'
					},
					{
						id: '32ree',
						name: '节点B',
						grade: 'FDD'
					},
					{
						id: '821221',
						name: '节点C',
						grade: 'FVDFA'
					},
					{
						id: '89238',
						name: '节点',
						grade: 'ERWFD'
					},
					{
						id: '323432',
						name: '节点B',
						grade: 'FDD'
					},

				];
				
				// 最后增加一列为操作
				this.tableColumns.push({
					prop: '',
					label: '操作',
					width: 280,
					align: 'center',
					operate: [
						{
							type: 'add',
							name: '新增',
						},
						{
							type: 'del',
							name: '删除',
						},
						
					]
				});
			},
			/**
			 * 接收table 组件操作时传入的参数
			 * @param row {object} 所选行
			 * @param type {String} 操作类型(add,del)
			 */
			tableOperateHandle(row, type) {
				console.log(row, type)

			}
		},
		components: {
			RefactorTable,
			Pagination
		},
		//接收子组件值
		handleCurrentChange(cpage) {
			this.currentPage = cpage;

		},
		handleSizeChang(psize) {
			this.limit = psize;
		}
	}
</script>

然后就可以实现表格内容动态显示啦~

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文