vue iview table组件和page组件简单组合使用

简述

    作为一组常用的控件,table常常和page控件组合使用以实现分页的效果,在此实现过程中借鉴了很多的博客,但是唯有这一篇更易理解,也更易实现,所以在这里分享给大家。以一下几部分展开:

模板

    大家接触过vue的都知道,在一个vue页中主要由模板,script,style三部分组成。那么首先我们来说一下模板是如何书写的。

<template>
    <div>
      <Table :columns="foodColumns" :data="foodData"></Table>       <!-- //table组件 -->
      <Page :total="dataCount" :page-size="pageSize" show-total  @on-change="changepage"></Page>    <!-- //page组件 -->
    </div>
</template>

script

    模板之后一般书写的就是script这部分的代码,script中又包括有准备数据、数据处理(model部分、处理部分)两部分。

首先我们来看一下数据的准备:此时我们使用的全为假数据。
{
   "foodName": "韭菜鸡蛋",
   "foodImage": "image",
   "foodPrice": "2.50",
   "foodClass": "热菜",
   "foodDelete": "####"
},
{
   "foodName": "韭菜鸡蛋",
   "foodImage": "image",
   "foodPrice": "2.50",
   "foodClass": "热菜",
   "foodDelete": "####"
},
{
   "foodName": "韭菜鸡蛋",
   "foodImage": "image",
   "foodPrice": "2.50",
   "foodClass": "热菜",
   "foodDelete": "####"
},
{
   "foodName": "韭菜鸡蛋",
   "foodImage": "image",
   "foodPrice": "2.50",
   "foodClass": "热菜",
   "foodDelete": "####"
},
{
   "foodName": "韭菜鸡蛋",
   "foodImage": "image",
   "foodPrice": "2.50",
   "foodClass": "热菜",
   "foodDelete": "####"
},
{
   "foodName": "韭菜鸡蛋",
   "foodImage": "image",
   "foodPrice": "2.50",
   "foodClass": "热菜",
   "foodDelete": "####"
},
{
   "foodName": "韭菜鸡蛋",
   "foodImage": "image",
   "foodPrice": "2.50",
   "foodClass": "热菜",
   "foodDelete": "####"
},
{
   "foodName": "韭菜鸡蛋",
   "foodImage": "image",
   "foodPrice": "2.50",
   "foodClass": "热菜",
   "foodDelete": "####"
},
{
   "foodName": "韭菜鸡蛋",
   "foodImage": "image",
   "foodPrice": "2.50",
   "foodClass": "热菜",
   "foodDelete": "####"
},
{
   "foodName": "韭菜鸡蛋",
   "foodImage": "image",
   "foodPrice": "2.50",
   "foodClass": "热菜",
   "foodDelete": "####"
},
{
   "foodName": "韭菜鸡蛋",
   "foodImage": "image",
   "foodPrice": "2.50",
   "foodClass": "热菜",
   "foodDelete": "####"
}
数据处理

    数据处理所需要做的:首先对列表的数据进行处理,显示多少条。然后对分页处理,当点击分页的时候,返回一个数值,然后通过数值从数据中筛选数据。最后把筛选出来的数据在给列表绑定的model赋值即可。

////////////////////////////////////model部分///////////////////////////////////////////////////
data () {
		return {
    	ajaxHistoryData:[],
    	// 初始化信息总条数
  		dataCount:0,
 		// 每页显示多少	
 		pageSize:5,
		foodColumns: [
		{
			title: '食物名称',
			key: 'foodName'
		},
		{
			title: '食物图片',
			key: 'foodImage'
		},
		{
			title: '食物价格',
			key: 'foodPrice'
		},
		{
			title: '所属菜系',
			key: 'foodClass'
		},
		{
			title: '删除',
			key: 'foodDelete'
		}


		],
		historyData: []
	}
}
////////////////////////////////////处理部分(方法)///////////////////////////////////
methods:{
            // 获取历史记录信息
            handleListApproveHistory(){
                
                // 保存取到的所有数据
                this.ajaxHistoryData = testData.histories
                this.dataCount = testData.histories.length;
                // 初始化显示,小于每页显示条数,全显,大于每页显示条数,取前每页条数显示
                if(testData.histories.length < this.pageSize){
                    this.foodData = this.ajaxHistoryData;
                }else{
                    this.foodData = this.ajaxHistoryData.slice(0,this.pageSize);
                }
                    
               
            },
            changepage(index){
                var _start = ( index - 1 ) * this.pageSize;
                var _end = index * this.pageSize;
                this.foodData = this.ajaxHistoryData.slice(_start,_end);
            }

            /* btnsubmit(){
                this.$router.push({path:'/Tips.vue'})

            } */
        },
        created(){
             this.handleListApproveHistory();
}

style

    这部分主要写的是组件的样式,如下:

<style scoped>
  .paging{
      float:right;
      margin-top:10px;
  }
</style>

完整页面代码(此方法没有使用到父子组件等)

<template>
  <div>
    <Table :columns="foodColumns" :data="foodData"></Table>//table组件
    <Page :total="dataCount" :page-size="pageSize" show-total @on-change="changepage"></Page>//page组件
  </div>
</template>
<script>
let testData = {
  histories: [
    {
      foodName: "韭菜鸡蛋",
      foodImage: "image",
      foodPrice: "2.50",
      foodClass: "热菜",
      foodDelete: "####"
    },
    {
      foodName: "韭菜鸡蛋",
      foodImage: "image",
      foodPrice: "2.50",
      foodClass: "热菜",
      foodDelete: "####"
    },
    {
      foodName: "韭菜鸡蛋",
      foodImage: "image",
      foodPrice: "2.50",
      foodClass: "热菜",
      foodDelete: "####"
    },
    {
      foodName: "韭菜鸡蛋",
      foodImage: "image",
      foodPrice: "2.50",
      foodClass: "热菜",
      foodDelete: "####"
    },
    {
      foodName: "韭菜鸡蛋",
      foodImage: "image",
      foodPrice: "2.50",
      foodClass: "热菜",
      foodDelete: "####"
    },
    {
      foodName: "韭菜鸡蛋",
      foodImage: "image",
      foodPrice: "2.50",
      foodClass: "热菜",
      foodDelete: "####"
    },
    {
      foodName: "韭菜鸡蛋",
      foodImage: "image",
      foodPrice: "2.50",
      foodClass: "热菜",
      foodDelete: "####"
    },
    {
      foodName: "韭菜鸡蛋",
      foodImage: "image",
      foodPrice: "2.50",
      foodClass: "热菜",
      foodDelete: "####"
    },
    {
      foodName: "韭菜鸡蛋",
      foodImage: "image",
      foodPrice: "2.50",
      foodClass: "热菜",
      foodDelete: "####"
    },
    {
      foodName: "韭菜鸡蛋",
      foodImage: "image",
      foodPrice: "2.50",
      foodClass: "热菜",
      foodDelete: "####"
    },
    {
      foodName: "韭菜鸡蛋",
      foodImage: "image",
      foodPrice: "2.50",
      foodClass: "热菜",
      foodDelete: "####"
    }
  ]
};
export default {
  data() {
    return {
      ajaxHistoryData: [],
      // 初始化信息总条数
      dataCount: 0,
      // 每页显示多少条
      pageSize: 10,
      foodColumns: [
        {
          title: "食物名称",
          key: "foodName"
        },
        {
          title: "食物图片",
          key: "foodImage"
        },
        {
          title: "食物价格",
          key: "foodPrice"
        },
        {
          title: "所属菜系",
          key: "foodClass"
        },
        {
          title: "删除",
          key: "foodDelete"
        }
      ],
      historyData: []
    };
  },
  methods: {
    // 获取历史记录信息
    handleListApproveHistory() {
      // 保存取到的所有数据
      this.ajaxHistoryData = testData.histories;
      this.dataCount = testData.histories.length;
      // 初始化显示,小于每页显示条数,全显,大于每页显示条数,取前每页条数显示
      if (testData.histories.length < this.pageSize) {
        this.foodData = this.ajaxHistoryData;
      } else {
        this.foodData = this.ajaxHistoryData.slice(0, this.pageSize);
      }
    },
    changepage(index) {
      var _start = (index - 1) * this.pageSize;
      var _end = index * this.pageSize;
      this.foodData = this.ajaxHistoryData.slice(_start, _end);
    }
  },
  created() {
    this.handleListApproveHistory();
  }
};
</script>

结果显示

在这里插入图片描述

总结

    不懂就要问,大家加油吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章