删除页面最后一条数据时,分页组件current没有减一,传入后端page也没减一导致查询页面列表为空

来源:6-10 增加删除电子书功能

geniusmorn

2021-04-23

老师怎么解决这个问题的?

写回答

4回答

甲蛙

2021-04-23

删除后, 我们是刷新当前页,可以改成从第1页开始查。

还有一种,在删除之前,判断,如果list.length=1,只有一条数据,那么刷新时,current-1

//img.mukewang.com/szimg/6082710609cb90fb09170384.jpg

0
1
geniusmorn
非常感谢!我修改后的代码在下面,请老师同学指正。
2021-04-25
共1条回复

weixin_慕仙5029974

2022-08-06

/**
 *  删除
 */
const handleDelete = (id: number) => {
    axios.delete("/ebook/delete/" + id).then((response) => {
        const data = response.data; // data = commonResp
        if (data.success) {
            // 判断删除后当前页面是否还有数据
            if (ebooks.value.length === 1){
                pagination.value.current--;
            }
            // 重新加载列表
            handleQuery({
                page: pagination.value.current,
                size: pagination.value.pageSize,
            });
        }
    });
};


0
0

weixin_慕仙5029974

2022-08-05

/**
 *  删除
 */
const handleDelete = (id: number) => {
    axios.delete("/ebook/delete/" + id).then((response) => {
        const data = response.data; // data = commonResp
        if (data.success) {
            // 判断删除后当前页面是否还有数据
            if (data.content == null){
                pagination.value.current--;
            }
            // 重新加载列表
            handleQuery({
                page: pagination.value.current,
                size: pagination.value.pageSize,
            });
        }
    });
};


0
1
weixin_慕仙5029974
这个是错的、、、
2022-08-06
共1条回复

geniusmorn

提问者

2021-04-25

// 删除
      const del = (id : number) => {
        // 定义公共变量
        let listLength = -1;
        // 删除前先去查当前页还有几条数据
        let myPromise = new Promise((resolve => {
          axios.get("/album/list", {
            params: {
              page: pagination.value.current,
              size: pagination.value.pageSize
            }
          }).then((response) => {
            const data = response.data;
            if(data.success){
              listLength = data.content.list.length;
              resolve("list已执行"); //successMessage
            }
          });
        }))
        // 如果拿到查询数据,再去删除,否则listLength还是-1
        myPromise.then((successMessage) =>{
          axios.delete("/album/delete/" + id).then(response => {
            if (response.data.success){
              console.log("list已执行", successMessage);
              console.log(listLength);
              // 删除成功后重置page, 再去刷新列表
              const current = pagination.value.current;
              const page = (listLength == 1) ? current - 1  : current;
              // 刷新列表
              handleQuery({
                page: page,
                size: pagination.value.pageSize
              });
            }
          })
        })
      };


我按照老师的思路,把删除函数修改了一下,用到了promise,可以解决这个BUG

如果有同学有更好更简洁的解决方案也欢迎指正和分享。


0
3
三祺
你这个解法太麻烦了
2022-12-10
共3条回复

Spring Boot+Vue3前后端分离,实战wiki知识库系统

一课掌握前后端最火框架,更有职场竞争力

2524 学习 · 1671 问题

查看课程