問題
問題1:當點選搜尋之後,分頁功能就會失效,不能點選,不能點選跳轉到指定頁碼;
問題2:在分頁邏輯處理完之後,會有一個上一頁和下一頁的處理邏輯,要設定頁碼限制。
問題3:打開該頁面會有第一次渲染頁面效果,頁碼會顯示所有資料的分頁,但你點選搜尋之後,渲染的是你檢測到的資料的分頁;
解決思路及相關重要步驟:
1.設計背景資料庫的語句-查詢sql的封裝
// 根據條件基礎查詢
//where是查詢的條件,column是查詢之後要求忽略的字段
find(col,where={},column={}){
return new Promise((resolve,reject)=>{
col.find(where,column,(err,data)=>{
if(err) reject(err);
resolve(data);
})
})
},
2.分頁sql語句的封裝
//col表示查詢的集合,where是根據查詢的條件,column忽略的顯示字段,num一頁顯示多少資料,index是從什麼索引開始進行查詢
page(col,where={},column={},num,index){
return new Promise((resolve,reject)=>{
col.find(where,column).limit(num).skip(index*num).exec((err,data)=>{
if(err) reject(err);
resolve(data);
})
})
},
3.查詢總資料條數
// 查詢資料的個數
count(col,column={}){
return new Promise((resolve,reject)=>{
col.countDocuments(column).exec((err,data)=>{
if(err) reject(err);
resolve(data);
})
})
},
js代碼塊的設計
1.分頁首先要知道資料的總數量以及總頁數,調用count方法得到總條數total,設定一個全局變量let num=5,表示每頁顯示五條資料,let index=0表示從索引為0的開始,計算得知總條數為total/num。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL5lEVNlXRE5ENNpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2QDO5IDO1QTM4EDMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
2.在這裡要特别注意的是,分為兩種情況,一種是沒有搜尋的分頁,一種是帶有搜尋的分頁,是以在進行分頁路由處理時,我們要進行不同的傳參,在計算count有一個參數為查詢的條件,我們在剛開始時聲明一個全局變量str="",當有查詢功能時,講查詢的條件傳給全局變量,即 處理查詢時str=req.body.search可以在進行分頁處理拿到全局變量,這個時候将該變量處理後作為count方法的第二個參數,得到的結果就是查詢之後的資料
router.get('/page',function(req,res,next){
let{index=0,num=5}=req.query;
index=Number(index);
let reg=new RegExp(str);
// 前端頁面上過來的可能是個字元
let where=str===""?{}:{userName:reg};
sql.page(user,where,{_d:0,__v:0},num-0,index*1).then(data=>{
sql.count(user,where).then(total=>{
res.render('users',{
index:2,
data:data,
power:req.session.power,
maxPage:Math.ceil(total/num),
num,
pageIndex:index,
})
})
})
})
3.在進行頁面渲染的時候每一個渲染的帶有路由處理,a标簽後攜帶路由跳轉以及要跳轉的頁碼數,将這個帶到路由進行處理。
4.到此分頁的主要邏輯已經分析完畢,接下來分析一下上一頁和下一頁的邊界限定
我使用了三目表達式處理,當點選的索引為0這個時候它的上一頁應該還是0,不能繼續減減
<li><a href="/users/page?index=<%pageIndex===0?0:pageIndex-1%>&num=5" target="_blank" rel="external nofollow" >«</a></li>
當點選的是最後一頁,為最大頁碼數-1,當點選最後一頁時,不應該将它繼續加加,應該讓他始終在目前頁上
<li><a href="/users/page?index=<%=pageIndex===maxPage-1?maxPage-1:pageIndex+1%>&num=5" target="_blank" rel="external nofollow" >»</a></li>
展示頁面效果
目前為沒有進行搜尋的頁面
搜尋條件為1,展示結果為