vue-element-ui前后端交互实现分页查询

这篇具有很好参考价值的文章主要介绍了vue-element-ui前后端交互实现分页查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

大体思路:

①添加element-ui分页组件

②在data里定义几个参数用来存放当前页,每页条数,条目总数以及存放后端分页查询的结果

③后端使用分页查询,controller层接收当前页以及每页条数的参数

④前端编写方法发送请求到controller层调用分页查询的方法,并传参当前页及每页条数

⑤接收查询结果并存放进之前定义好的参数中

⑥给前端点击上下页等功能绑定事件,事件调用分页查询的方法并传参

前端:

①添加element-ui分页组件

<!--
            @size-change,pageSize 改变时会触发
            @current-change , currentPage 改变时会触发
            :current-page 当前页码
            :page-sizes  选择每页显示个数
            :page-size  默认每页显示条目个数,支持 .sync 修饰符
            layout 组件布局,
            :total 总条目数
            -->
        <el-pagination
                @size-change="handleSizeChange"
                @current-change="handleCurrentChange"
                :current-page="pageNum"
                :page-sizes="[5, 10, 15, 20]"
                :page-size="pageSize"
                layout="total, sizes, prev, pager, next, jumper"
                :total="total">
        </el-pagination>

②在data里定义几个参数用来存放当前页,每页条数,条目总数以及存放后端分页查询的结果

newsData:[], //存放接收后端的数据
pageNum: 1, // 当前页 默认设值1
pageSize: 5, // 每页显示条目 默认设置5
total: '' ,// 条目总数

 vue分页查询怎么实现,分页查询,java,ElementUi,vue.js,ui,前端,交互,elementui

 ③后端使用分页查询,controller层接收当前页以及每页条数的参数

 controller层

vue分页查询怎么实现,分页查询,java,ElementUi,vue.js,ui,前端,交互,elementui

 文章来源地址https://www.toymoban.com/news/detail-803088.html

vue分页查询怎么实现,分页查询,java,ElementUi,vue.js,ui,前端,交互,elementui

service层

vue分页查询怎么实现,分页查询,java,ElementUi,vue.js,ui,前端,交互,elementui 

 ④前端编写方法发送请求到controller层调用分页查询的方法,并传参当前页及每页条数

⑤接收查询结果并存放进之前定义好的参数中

                loadPage(pageNum,pageSize) {
                    let url = '/news/page';
                    axios.get(url,{
                        params:{
                            // pageNum:this.pageNum,
                            // pageSize:this.pageSize
                            pageNum,
                            pageSize
                        }
                    }).then(resp => {
                        resp.data.list.get
                        this.newsData = resp.data.list;
                        this.total = resp.data.total;
                        // this.total = resp.data.list.total;
                        console.log(resp.data);
                    });
                }

⑥给前端点击上下页等功能绑定事件,事件调用分页查询的方法并传参

                handleSizeChange(val) {
                    this.pageSize = val;
                    this.loadPage(this.pageNum,this.pageSize);
                    console.log(`每页 ${val} 条`);
                },
                handleCurrentChange(val) {
                    this.pageNum = val;
                    this.loadPage(this.pageNum,this.pageSize);
                    console.log(`当前页: ${val}`);
                },

功能展示:

vue分页查询怎么实现,分页查询,java,ElementUi,vue.js,ui,前端,交互,elementui

vue分页查询怎么实现,分页查询,java,ElementUi,vue.js,ui,前端,交互,elementui 

我的前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>listdemo</title>
    <script src="/js/vue-2.6.10.js"></script>
    <script src="/js/axios.min.js"></script>
    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <!-- 引入组件库 -->
    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
</head>
<body>
    <div id="root">
        <el-button
                size="mini"
                type="primary"
                @click="clean">发布新闻</el-button>
        <el-table
                ref="news"
                :data="newsData"
                tooltip-effect="dark"
                style="width: 100%"
                @selection-change="handleSelectionChange">
            <el-table-column
                    type="selection"
                    width="55">
            </el-table-column>
            <el-table-column
                    prop="nid"
                    label="新闻编号"
                    width="120">
            </el-table-column>
            <el-table-column
                    prop="ntid"
                    label="主题编号"
                    width="120">
            </el-table-column>
            <el-table-column
                    prop="ntitle"
                    label="新闻标题"
                    width="120">
            </el-table-column>
            <el-table-column
                    prop="nauthor"
                    label="新闻作者"
                    width="120">
            </el-table-column>
            <el-table-column
                    prop="ncreateDate"
                    label="创建日期"
                    width="120">
            </el-table-column>
            <el-table-column
                    prop="npicPath"
                    label="图片路径"
                    width="120">
            </el-table-column>
            <el-table-column
                    prop="ncontent"
                    label="新闻内容"
                    width="120"
                    show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column
                    prop="nmodifyDate"
                    label="修改时间"
                    width="120">
            </el-table-column>
            <el-table-column
                    prop="nsummary"
                    label="备注信息"
                    width="120"
                    show-overflow-tooltip="true">
            </el-table-column>
            <el-table-column
                    prop="comment"
                    label="评论信息"
                    width="120">
            </el-table-column>
            <el-table-column label="操作" width="120">
                <template slot-scope="scope">
                    <el-button
                            size="mini" 
                            @click="dialogFormVisible = true;getDate(scope.$index)">编辑
                    </el-button>
                    <el-dialog title="修改信息"
                               :visible.sync="dialogFormVisible"
                               :close-on-click-modal="false"
                               @close="onClose">
                        <el-form ref="form"
                                 :model="form"
                                 :rules="rules"
                                 label-width="100px"
                                 class="demo-form">
                            <el-form-item label="新闻编号" prop="nid">
                                <el-input v-model="form.nid"></el-input>
                            </el-form-item>
                            <el-form-item label="主题编号" prop="ntid">
                                <el-input v-model="form.ntid"></el-input>
                            </el-form-item>
                            <el-form-item label="新闻标题" prop="ntitle">
                                <el-input type="textarea" v-model="form.ntitle"></el-input>
                            </el-form-item>
                            <el-form-item label="新闻作者" prop="nauthor">
                                <el-input v-model="form.nauthor"></el-input>
                            </el-form-item>
                            <el-form-item label="创建日期" prop="ncreateDate">
                                <el-date-picker type="date"
                                                placeholder="选择日期"
                                                v-model="form.ncreateDate"
                                                style="width: 100%;"></el-date-picker>
                            </el-form-item>
                            <el-form-item label="图片路径" prop="npicPath">
                                <el-input v-model="form.npicPath"></el-input>
                            </el-form-item>
                            <el-form-item label="新闻内容" prop="ncontent">
                                <el-input type="textarea" v-model="form.ncontent"></el-input>
                            </el-form-item>
                            <el-form-item label="修改时间" prop="nmodifyDate">
                                <el-date-picker type="date" 
                                                placeholder="修改时间" 
                                                v-model="form.nmodifyDate" 
                                                style="width: 100%;"></el-date-picker>
                            </el-form-item>
                            <el-form-item label="备注信息" prop="nsummary">
                                <el-input type="textarea" v-model="form.nsummary"></el-input>
                            </el-form-item>
                            <el-form-item>
                                <el-button type="primary" @click="submitForm('form')">立即创建</el-button>
                                <el-button @click="resetForm('form')">重置</el-button>
                            </el-form-item>
                        </el-form>
                        <div slot="footer" class="dialog-footer">
                            <el-button @click="dialogFormVisible = false">取 消</el-button>
                            <el-button type="primary" 
                                       @click="dialogFormVisible = false;loadUpdate">确 定
                            </el-button>
                        </div>
                    </el-dialog>
                    <el-button
                            size="mini"
                            type="danger"
                            @click="handleDelete(scope.$index, scope.row)">删除</el-button>
                </template>
            </el-table-column>
        </el-table>
        <!--
            @size-change,pageSize 改变时会触发
            @current-change , currentPage 改变时会触发
            :current-page 当前页码
            :page-sizes  选择每页显示个数
            :page-size  默认每页显示条目个数,支持 .sync 修饰符
            layout 组件布局,
            :total 总条目数
            -->
        <el-pagination
                @size-change="handleSizeChange"
                @current-change="handleCurrentChange"
                :current-page="pageNum"
                :page-sizes="[5, 10, 15, 20]"
                :page-size="pageSize"
                layout="total, sizes, prev, pager, next, jumper"
                :total="total">
        </el-pagination>
    </div>
    <script>
        new Vue({
            el:"#root",
            data(){
                return{
                    newsData:[],
                    pageNum: 1, // 当前页
                    pageSize: 5, // 每页显示条目
                    total: '' ,// 条目总数
                    dialogFormVisible: false,
                    form: {
                        delivery: false,
                        type: [],
                        nid:'',
                        ntid:'',
                        ntitle:'',
                        nauthor:'',
                        ncreateDate:'',
                        npicPath:'',
                        ncontent:'',
                        nmodifyDate:'',
                        nsummary:''
                    },
                    rules: {
                        nid: [
                            { required: true, message: '请输入新闻编号', trigger: 'blur' },
                            { min: 1, max: 5, message: '长度在 1 到 5 个字符', trigger: 'blur' }
                        ],
                        ntid: [
                            { required: true, message: '请输入主题编号', trigger: 'blur' }
                        ],
                        ntitle: [
                            { required: true, message: '请输入新闻标题', trigger: 'blur' }
                        ],
                        nauthor: [
                            { required: true, message: '请输入新闻作者', trigger: 'blur' }
                        ],
                        ncreateDate: [
                            { type: 'date', required: true, message: '请选择创建日期', trigger: 'change' }
                        ],
                        npicPath: [
                            { required: true, message: '请输入图片路径', trigger: 'blur' }
                        ],
                        ncontent: [
                            { required: true, message: '请输入新闻内容', trigger: 'blur' }
                        ],
                        nmodifyDate: [
                            { type: 'date', required: true, message: '请选择修改时间', trigger: 'change' }
                        ],
                        nsummary: [
                            { required: true, message: '请输入备注信息', trigger: 'blur' }
                        ],
                    },
                    formLabelWidth: '120px'
                }
            },

            methods: {
                onClose() {
                    this.form = '';
                },
                clean() {
                    // this.form = '';
                    this.dialogFormVisible = true;
                    // this.show();
                },
                show() {
                    this.dialogFormVisible = true;
                },
                toggleSelection(rows) {
                    if (rows) {
                        rows.forEach(row => {
                            this.$refs.multipleTable.toggleRowSelection(row);
                        });
                    } else {
                        this.$refs.multipleTable.clearSelection();
                    }
                },
                handleSelectionChange(val) {
                    this.multipleSelection = val;
                },
                handleEdit(index, row) {
                    console.log(index, row);
                },
                getDate(index){
                  this.form = this.newsData[index];
                },
                handleDelete(index, row) {
                    this.$confirm('是否确定删除此条数据','提示', {
                        confirmButtonText: '确定',
                        cancelButtonText: '取消',
                        type: 'warning'
                        // center: true
                    }).then(() => {
                        let url = `/news/delete/${row.nid}`;
                        axios.delete(url).then(resp => {
                            this.loadAll();
                            console.log(resp.data);
                        });
                        this.$message({
                            type: 'success',
                            message: '删除成功!'
                        });
                    }).catch(() => {
                        this.$message({
                            type: 'info',
                            message: '已取消删除'
                        });
                    });
                    // console.log(index, row);
                },
                loadAll() {
                    //then()回调函数,获取后台响应的数据
                    let url = '/news/findAll';
                    axios.get(url).then(resp => {
                        this.newsData = resp.data;
                        console.log(resp.data);
                    });
                },
                loadUpdate() {
                    let url = 'news/update';
                    // let news = JSON.parse(this.form);
                    axios.put(url, this.form).then(resp => {
                        this.loadAll();
                        console.log(resp.data);
                    });
                },
                submitForm(formName) {
                    this.$refs[formName].validate((valid) => {
                        if (valid) {
                            alert('submit!');
                        } else {
                            console.log('error submit!!');
                            return false;
                        }
                    });
                },
                resetForm(formName) {
                    this.$refs[formName].resetFields();
                },
                loadAdd() {
                    let url = 'news/insert';
                    axios.post(url,params).then(resp => {
                        console.log(resp.data);
                    });
                },
                handleSizeChange(val) {
                    this.pageSize = val;
                    this.loadPage(this.pageNum,this.pageSize);
                    console.log(`每页 ${val} 条`);
                },
                handleCurrentChange(val) {
                    this.pageNum = val;
                    this.loadPage(this.pageNum,this.pageSize);
                    console.log(`当前页: ${val}`);
                },
                loadPage(pageNum,pageSize) {
                    let url = '/news/page';
                    axios.get(url,{
                        params:{
                            // pageNum:this.pageNum,
                            // pageSize:this.pageSize
                            pageNum,
                            pageSize
                        }
                    }).then(resp => {
                        resp.data.list.get
                        this.newsData = resp.data.list;
                        this.total = resp.data.total;
                        // this.total = resp.data.list.total;
                        console.log(resp.data);
                    });
                }
            },
            created(){
                this.loadPage(this.pageNum,this.pageSize);
                // this.loadAll();
            }
        })
    </script>

</body>
</html>

 

 

到了这里,关于vue-element-ui前后端交互实现分页查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue搭配element-ui前端实现表格分页

    如果不从后台请求数据,那么就需要在前端手动管理数据。可以使用以下步骤实现该功能: 在 Vue 组件的 data 中定义一个数组来存放所有数据(不分页)。 在 mounted 钩子函数中,手动获取数据并存放到上一步定义的数组中。 在模板中使用 element-ui 的表格组件来展示数据,同

    2024年02月11日
    浏览(33)
  • vue使用element-ui实现分页功能

    element-ui官网上有分页实现的功能,简单方便又好用,也有很多分页的样式,你可以根据需要去选择自己想要的样式。这里讲的是完整功能样式的一个分页实现。过程如下: 分页方法完成。

    2024年02月13日
    浏览(33)
  • Vue使用Element-UI实现分页效果

    分页在展示数据列表的场景肯定是非常多的。 一般的项目开发中,数据量特别大,一般都是后端接口直接处理分页返回,前端直接调用即可。 但是前端也是可以不需要借助后端,自己也是可以处理分页的。今天我这个后端开发就站在前端的角度上,处理列表分页。 友情提示

    2024年02月02日
    浏览(37)
  • 【分页表格】Vue2 + Element UI实现自定义的分页表格组件(自定义Vue组件)

    这篇文章,主要介绍Vue2 + Element UI实现自定义的分页表格组件(自定义Vue组件)。 目录 一、分页表格 1.1、运行效果 1.2、运行环境 1.3、案例代码

    2024年02月11日
    浏览(46)
  • Vue.js 中使用 Element UI 实现异步加载分页列表

    在前端开发中,我们常常需要展示大量数据,并提供分页浏览的功能。本篇博客将介绍如何使用 Vue.js 和 Element UI 组件库创建一个简单的异步加载分页列表。 Vue.js Element UI JavaScript 我们将创建一个包含表格和分页组件的 Vue 单文件组件。以下是组件的基本结构: 引入 Element U

    2024年02月04日
    浏览(44)
  • Vue2 + element ui el-select 远程搜索分页懒加载功能实现

    新建指令 :         1、 在 src 目录下 新建文件夹 directive / loadmore         2、在 loadmore 文价夹下新建 elSelectLoadmore.js 和 index.js 文件:            elSelectLoadmore.js index.js 3、在main 文件中注册该指令 4、 基于 el-select 封装 懒加载 远程搜索框 remoteSelect.vue 组件提示

    2024年01月21日
    浏览(41)
  • Vue+Element-UI 实现前端分页功能,利用el-table和el-pagination组件实现表格前端分页

    Vue+Element-UI 实现前端分页功能,利用el-table和el-pagination组件实现表格前端分页:         当table的数据量比较大的时候,一个屏幕展示不出全部的数据,这个时候就需要分页显示。而多数情况下都是做的后端分页,就是将分页参数和查询条件一并传到后端,后端将当前页要

    2024年01月20日
    浏览(43)
  • 若依前后端分离+Vue2+Element UI实现根据列数据展示不同页面的数据

    多个表格中存在同一字段,并且可通过该字段查到与之对应的数据。举个简单的例子,比如我有一个学生表、一个老师表、一个课程表,假设老师表和学生表里都有课程ID这一字段,那么我可以在课程表里通过课程ID来,查找需要上这门课的学生,以及教这门课的老师,并且在

    2024年01月19日
    浏览(36)
  • spring boot 配合element ui vue实现表格的批量删除(前后端详细教学,简单易懂,有手就行)

    目录 一.前言: 二. 前端代码: 2.1.element ui组件代码   2.2删除按钮 2.3.data 2.4.methods 三.后端代码: 研究了其他人的博客,找到了一篇有含金量的,进行了部分改写实现前后端分离,参考博主为小白Rachel 先看看页面效果,要是符合你们所需的功能那就继续看下去         1406

    2024年02月04日
    浏览(61)
  • Java之Spring Boot+Vue+Element UI前后端分离项目,前端插件化主流框架和实现原理

    三、设置Axios发起请求统一前缀的路径 https://code100.blog.csdn.net/article/details/123302546 1、HelloWorld.vue getInfo() { this.$http.get(‘blog/queryBlogByPage?title=’ + this.title + ‘page=’ + this.page + ‘rows=’ + this.rows) .then(response = ( this.info = response.data, this.total = this.info.total, this.totalPage = this.info.tota

    2024年04月16日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包