Vue+iview分页组件的简单使用

vue+iview 分页组件

首先看看iview 分页组件的使用方法
1、:total是Page属性,为总条数
2、:current是Page属性,为当前页数
3、:page-size是Page属性,为当前显示数据条数
4、show-elevat对应html 图中跳至1页
5、show-sizer对应html图中10条/页
6、show-total对用html图中共58条
iview'

前台页面

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script src="assets/jquery-3.4.1.min.js"></script>
    <!-- import Vue.js -->
    <script src="//vuejs.org/js/vue.min.js"></script>
    <!-- import stylesheet -->
    <link rel="stylesheet" href="//unpkg.com/view-design/dist/styles/iview.css">
    <!-- import iView -->
    <script src="//unpkg.com/view-design/dist/iview.min.js"></script>
</head>
<body>
<div id='app'>
    <input type="text" class="ivu-input" id="search" style="width: 400px">
    <i-button type="primary"  id="search" @click="openRecords">搜索一下</i-button>

    <div v-for="zbs in listObj">
        --id--{{zbs.id}} --关键字--{{zbs.keywords}}
    </div>

    <div id="pagetotal" style="display:none">
        <Page :total="dataCount"
              :current.sync="current"
              :page-size="pageSize"
              show-total class="paging"
              @on-change="changePage"></Page>
    </div>
</div>

<script>
    new Vue({
        el: '#app',
        data: {
            current: 1,
            isShow: false,
            dataCount: 0,//总条数
            listObj: [],
            pageSize: 10,//每页显示数据条数
        },
        methods: {
            openRecords: function () {
                var id = document.getElementById("search");
                pageIndex = 0;
                var self = this;
                $.ajax({
                    url: "/book/queryByPage",
                    type: "POST",
                    data: {"pageIndex": pageIndex, "pageSize": self.pageSize},
                    success: function (data) {
                        var zb = JSON.parse(data.body.parameters.return);
                        var value = zb.content;
                        self.listObj = value;
                        self.dataCount = zb.totalElements;
                    }
                });
                $("#pagetotal").show();
            },

            changePage(index) {//页码改变触发的函数
                var self = this;
                //index当前页码
                var pageIndex = (index - 1) * this.pageSize;
                $.ajax({
                    url: "/book/queryByPage",
                    type: "POST",
                    data: {"pageIndex": pageIndex, "pageSize": self.pageSize},
                    success: function (data) {
                        var zb = JSON.parse(data.body.parameters.return);
                        var value = zb.content;
                        self.listObj = value;
                    }
                });
            },
        },
    })

</script>
</body>
</html>

后台代码

@RequestMapping("/book/queryByPage")
	public List<User> queryByPage() {
		List<User> zbZskData = userService.queryAll();
		return List;
	}
}

其他的service 实体类都很简单自己创建,到此vue+iview分页组件已经完成

### 实现多选和反选功能 为了实现在 Vue.js 和 iView 的 table 组件中的多选和反选功能,可以采取以下方法: #### 数据存储策略 对于多选状态的保存,在页面切换时不丢失已选择的数据项,建议创建一个独立的状态管理对象 `selectedRows` 来记录所有被选中的行。每当用户选择了某一行或取消选择时更新此列表。 ```javascript data() { return { selectedRows: [], // 存储当前选中的行ID或其他唯一标识符 detailData: { vos: [] // 表格显示的数据源 } }; } ``` #### 自定义渲染器处理逻辑 通过自定义列模板的方式向每行添加复选框控件,并监听其变化事件以便同步到全局的选择集合中去[^1]。 ```html <template slot-scope="{ row, index }"> <Checkbox v-model="row._checked" @on-change="handleSelectionChange(index)"> </Checkbox> </template> ``` 当检测到单个选项改变时调用相应的方法来维护整个表格内的全选/部分选标志位以及具体哪些条目处于选定状态。 ```javascript methods: { handleSelectionChange(idx) { const item = this.detailData.vos[idx]; if (item._checked && !this.selectedRows.includes(item.id)) { this.$set(this.selectedRows, this.selectedRows.length, item.id); } else if (!item._checked){ let idIndex = this.selectedRows.indexOf(item.id); if(idIndex !== -1){ this.selectedRows.splice(idIndex, 1); } } // 更新全选按钮状态 updateSelectAllStatus(); }, updateSelectAllStatus(){ var allChecked = true; for(let i=0;i<this.detailData.vos.length;i++){ if(!this.detailData.vos[i]._checked){ allChecked=false;break; } } this.selectAll=allChecked; }, toggleAllSelection(status){ this.detailData.vos.forEach((item)=>{ this.$set(item,'_checked',status); }); status?this.selectedRows=this.getAllIds():this.selectedRows=[]; this.updateSelectAllStatus(); }, getAllIds(){ return this.detailData.vos.map(({id})=>id); } } ``` 上述代码片段展示了如何利用 `_checked` 属性标记每一行是否已被勾选,并且提供了两个辅助函数用于批量操作——即全部选中 (`toggleAllSelection(true)`) 或者清除所有选择(`toggleAllSelection(false)`)[^2]。 #### 页面加载完成后初始化已有选择 考虑到分页场景下的持久化需求,可以在请求新的一页之前先将现有的 `selectedRows` 发送到服务器端暂存起来;而在接收到新一批数据之后再依据这些 ID 列表恢复对应的 checkbox 状态。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值