vuejs實現本地數據的篩選分頁

来源:http://www.cnblogs.com/jinzhenzong/archive/2017/11/15/7837234.html
-Advertisement-
Play Games

今天項目需要一份根據本地數據的篩選分頁功能,好吧,本來以為很簡單,網上搜了搜全是ajax獲取的數據,這不符合要求啊,修改起來太費力氣,還不如我自己去寫,不多說直接上代碼 效果圖: 項目需要:點擊左側進行數據篩選,實現自動分頁,自動生成頁數,點擊自動跳轉 項目代碼:js代碼 下麵是html節點代碼: ...


今天項目需要一份根據本地數據的篩選分頁功能,好吧,本來以為很簡單,網上搜了搜全是ajax獲取的數據,這不符合要求啊,修改起來太費力氣,還不如我自己去寫,不多說直接上代碼

效果圖:

項目需要:點擊左側進行數據篩選,實現自動分頁,自動生成頁數,點擊自動跳轉

項目代碼:js代碼

var subList=new Vue({
el:'#main',
data:{
// subcontentData為本地數據
subContents:subcontentData,
// 頁面需要展現的數據
yemiandata:[],
// 頁面展現條數
datanum:12,
// 開始椰樹
startnum:0,
// 結束椰樹
endnum:1,
// 一共多少頁
btnnum:0,
// 生成切換頁面的按鈕用
listnum:[],
// input跳轉
jemp:1,




},
methods:{
filters(num){
this.subContents=subcontentData;
// 需要重置防止翻頁導致startnum和endnum不一致
this.startnum=0;
this.endnum=1;
// 這裡是判斷篩選按鈕
switch(num){

case 0: $('#sublist li').css({
background:'#f2f2f2'
}).eq(0).css({
background:'#dbe9f0'
});
this.fenye();
break;
case 1:

$('#sublist li').css({
background:'#f2f2f2'
}).eq(1).css({
background:'#dbe9f0'
});
this.subContents=this.subContents.filter(num=>{

return String(num['department']).includes('行政');
});
this.fenye();
break;
case 2:
$('#sublist li').css({
background:'#f2f2f2'
}).eq(2).css({
background:'#dbe9f0'
});
this.subContents=this.subContents.filter(num=>{

return String(num['department']).includes('報關');
});
this.fenye();
break;
case 3:
$('#sublist li').css({
background:'#f2f2f2'
}).eq(3).css({
background:'#dbe9f0'
});
this.subContents=this.subContents.filter(num=>{

return String(num['department']).includes('組裝');
});
this.fenye();
break;
case 4:
$('#sublist li').css({
background:'#f2f2f2'
}).eq(4).css({
background:'#dbe9f0'
});
this.subContents=this.subContents.filter(num=>{

return String(num['department']).includes('電子');
});
this.fenye();
break;
case 5:
$('#sublist li').css({
background:'#f2f2f2'
}).eq(5).css({
background:'#dbe9f0'
});
this.subContents=this.subContents.filter(num=>{

return String(num['department']).includes('工藝');
});
this.fenye();
break;
case 6:
$('#sublist li').css({
background:'#f2f2f2'
}).eq(6).css({
background:'#dbe9f0'
});
this.subContents=this.subContents.filter(num=>{

return String(num['department']).includes('財務');
});
this.fenye();
break;
case 7:
$('#sublist li').css({
background:'#f2f2f2'
}).eq(7).css({
background:'#dbe9f0'
});
this.subContents=this.subContents.filter(num=>{

return String(num['department']).includes('製造');
});
this.fenye();
break;
case 8:
$('#sublist li').css({
background:'#f2f2f2'
}).eq(8).css({
background:'#dbe9f0'
});

this.subContents=this.subContents.filter(num=>{

return String(num['department']).includes('銷售');
});

this.fenye();
break;
}
},
// 分野函數
fenye(){

this.yemiandata=this.subContents.slice(this.startnum*this.datanum,this.endnum*this.datanum);
this.btnnum=Math.ceil(this.subContents.length/this.datanum);
this.listnum=[];
for(i=0;i<this.btnnum;i++){

this.listnum[i]=i+1;
}
btnwidth();


},
// 下一頁函數
nextlist(){
if(this.endnum>= this.btnnum){
alert('最後一頁了');

return false;
}
this.endnum++;
this.startnum++;





},
// 上一頁函數
prevlist(){
if(this.startnum<= 0){
alert('第一頁了');

return false;
}
this.endnum--;
this.startnum--;




},
// 按鈕跳轉到制定的頁面
jemppage(list){
this.startnum=list-1;
this.endnum=list;
},
// input跳抓
goindex(){
console.log(parseInt(this.jemp));
if(parseInt(this.jemp)>this.btnnum){alert('請輸入合法參數');return}
this.endnum=this.jemp;
this.startnum=this.jemp-1;
}

},
// 使用一個監聽。可以減少很多代碼
watch:{
startnum(n,o){

this.yemiandata=this.subContents.slice(n*this.datanum,(parseInt(n)+1)*this.datanum);


}
}
});

subList.filters(0);
subList.fenye();
// 封裝一下底部btn方法 底部自動大小
function btnwidth(){
$('#fbtn').css({
width:(subList.listnum.length+2)*40+293+'px',
marginLeft:-((subList.listnum.length+2)*40+293)/2+'px'
})
}

btnwidth();

下麵是html節點代碼:


<div class="main_content">
<div class="table2_nav">
<ul id="sublist">
<li @click="filters(0)"><div class="blockcenter">部門分類(部門8/8)</div></li>
<li @click="filters(1)"><div class="blockcenter">行政部</div></li>
<li @click="filters(2)"><div class="blockcenter">報關科</div></li>
<li @click="filters(3)"><div class="blockcenter">組裝部</div></li>
<li @click="filters(4)"><div class="blockcenter">電子部</div></li>
<li @click="filters(5)"><div class="blockcenter">工藝部</div></li>
<li @click="filters(6)"><div class="blockcenter">財務部</div></li>
<li @click="filters(7)"><div class="blockcenter">製造部</div></li>
<li @click="filters(8)"><div class="blockcenter">銷售部</div></li>
</ul>
</div>
<div class="table2_content">
<div class="col-title bg-fff clearfix">
<h5 class="fl">告警策略報表統計</h5>
<div class="btn fl">
主機名稱&nbsp;<span class="caret"></span>
<div class="btn_down">
<ul>
<li>下啦</li>
<li>下啦2</li>
</ul>
</div>



</div>
<div class="fl btn2">
添加
</div>
</div>

<table width="1410px" class="table" id="tablelist tab">
<tr>
<th>工號</th>
<th>姓名</th>
<th>部門名稱</th>
<th>性別</th>
<th>籍貫</th>
<th>員工狀態</th>
<th>入職時間</th>
<th>離職時間</th>
<th>離職類別</th>

</tr>
<tr v-for="subContent in yemiandata">
<td>{{subContent.num}}</td>
<td>{{subContent.name}}</td>
<td>{{subContent.department}}</td>
<td>{{subContent.sex}}</td>
<td>{{subContent.addres}}</td>
<td>{{subContent.staic}}</td>
<td>{{subContent.jointime}}</td>
<td>{{subContent.leavetime}}</td>
<td>{{subContent.type}}</td>

</tr>


</table>

<div class="vuetab clearfix">
<ul class="fbtn clearfix" id="fbtn">
<li @click="prevlist()">&lt;</li>
<!--<li @click="jemppage($event)">1</li>-->
<li v-for="list in listnum" @click="jemppage(list)">{{list}}</li>
<li @click="nextlist()">&gt;</li>
<div id="pages">共{{btnnum}}頁</div>
<div id="gotoindex">到第 <input type="text" :value="jemp" v-model="jemp" id="inputnum"> 頁</div>
<button id="gobtn" @click="goindex()">確定</button>
</ul>





</div>
</div>
</div>

說下思路:首先我們需要本地一組數據,通過vue添加到頁面中,第二步我們需要做好分頁,那麼可以寫一個函數對吧,所以有了下麵的fenye(命名不規範,大蝦勿怪)函數,所謂分頁無非就是把一個大數據分成每個小頁面去展現,所以我寫了一個專門用來展現的數組,也就是yemiandata(同樣不規範,我說因為我做的網站內容太多了,所以命名已經用盡了,你們信麽),之後我們需要得到多少個頁面,並變成一個btn按鈕,為了省事,我增加了一個watch:用來監聽startnum(開始頁數)他變化的話就改變展現。
第三步:分頁的話肯定要有上一頁下一頁,這個就簡單多了下一頁就是startnum和endnum都增加一,上一頁反之。
第四步:也要有點擊頁數的按鈕進行跳轉,這個也不難,就是讓按鈕點下去跳轉到指定頁,但是去寫函數麽?不現實對吧,所以我用了一個數組listnum存放多少個按鈕,這裡解釋下為什麼不用變數用數組,因為vue中v-for不支持變數迴圈,所以我改用數組,方便前面html生成節點。
第五步說了需要做篩選,篩選的話就是吧需要展現的素組變成包含制定關鍵詞的,filters函數,利用js的filter和includes進行篩選,做完看看,失敗了,出現了很多undefind,為什麼?仔細看看沒有重置數組,導致第二次篩選是在第一次篩選完的基礎篩選。那就重置一下咯,再看看,搞定!
大體思路就是這樣,有不明白的小伙伴可以添加我qq:421217189.
        最後因為是自己公司的項目所以有部分代碼是我公司項目需要,例如下啦框,css代碼就不進行分享了。小伙伴們自行發揮。有任何不明白的可以討論

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 負載均衡集群企業級應用實戰-LVS 實現基於LVS負載均衡集群的電商網站架構 隨著業務的發展,網站的訪問量越來越大,網站訪問量已經從原來的1000QPS,變為3000QPS,網站已經不堪重負,響應緩慢,面對此場景,單純靠單台LNMP的架構已經無法承載更多的用戶訪問,此時需要用負載均衡技術,對網站容量 ...
  • 恢復內容開始 設計模式(design patterns)是一套被反覆使用,多數人知曉的,經過分類編目的,使用設計模式是 為了可重用代碼,讓代碼更容易更容易被他人理解,保證代碼可靠性。 設計模式一共有23種: 1. 設計者模式分類 (三大類) 創建者模式: 一共分5種 工廠方法模式 , 抽象工廠模式, ...
  • CDN的全稱是Content Delivery Network,即內容分髮網絡。 其基本思路是儘可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。通過在網路各處放置節點伺服器所構成的在現有的互聯網基礎之上的一層智能虛擬網路,CDN系統能夠實時地根據網路流量和... ...
  • 題目1:通過代碼描述每一天的不同時間段的工作效率 分析: 首先確定,工作狀態指正在工作,或者以及下班這些情況,而這些情況所受影響的因素包括:當前時間以及任務是否已經完成。所以在Work中需要兩個屬性:hour和finish。然後根據這兩個屬性直接判斷當前的工作狀態即可。 實現: 1 class Pr ...
  • 1. 什麼是領域(Domain) 我們所做的軟體系統的目的都是來解決一系列問題,例如做一個電商系統來線上銷售自己企業的產品;做一個灰度發佈平臺來提升服務的質量和穩定性。任何一個系統都會屬於某個特定的領域,例如: 論壇是一個領域:要做一個論壇,那這個論壇的核心業務是確定的:比如用戶發帖、回帖等核心基本 ...
  • 複習一下: | 基礎模塊 | 作用 | | | | | fs | fs模塊用於對系統文件及目錄進行讀寫操作 | | http | 創建伺服器。e.g.http.createServer(); | | queryString | 把url帶的參數串轉化為數組對象 | | url | 直接解析URL中字 ...
  • 這篇文章主要對vue的理解進行總結: 參考來源:http://blog.csdn.net/generon/article/details/72482844 vue.js是一套構建用戶界面的漸進式框架,它的核心庫只關註視圖層。它相比之其它的框架來說要更加的輕便,易於上手,相對與大部分的框架在性能方面要 ...
  • 這篇文章我想來集中地講述一下Angular路由的普通應用到惰性載入的知識,對我這段時間的學習做一個全面的彙總! Angular的路由,我把它的演變過程分成三個階段: 1.Angular路由直接在app.module.ts-->imports--> RouterModule裡面編寫路由; 2.由於直接 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...