首頁 > php教程 > php手册 > vue.js配合thinkphp下拉取得分頁數據

vue.js配合thinkphp下拉取得分頁數據

WBOY
發布: 2016-10-09 08:32:15
原創
2575 人瀏覽過

对照着jquery来学vue.js系列之配合thinkphp下拉获取分页数据
上篇文章介绍了vue.js如何ajax获取数据;
接着不可避免就遇到的是;
如何进行数据分页呢?
这里以thinkphp为示例讲解;其他场景性质一样;
示例项目:http://git.oschina.net/shuaibai123/thinkphp-bjyadmin
示例链接:localhost/Home/Vue/web_page
项目中有张表province_city_area;
里面是全国的3000多个城市;这里就拿它做分页了;
一:thinkphp获取分页数据/Application/Home/Controller/VueController.class.php<br>     /**<br>      * 配合thinkphp分页示例<br>      */<br>     public function page(){<br>         // 获取总条数<br>         $count=M('Province_city_area')->count();<br>         // 每页多少条数据<br>         $limit=100;<br>         $page=new \Org\Nx\Page($count,$limit);<br>         $data=M('Province_city_area')<br>             ->limit($page->firstRow.','.$page->listRows)<br>             ->select();<br>         echo json_encode($data);<br>     }二:前端接收数据的核心部分;
要实现的是移动端往那种下拉就加载数据的效果;
首先是先用ready方法加载第一页的数据显示到页面中;
设置一个变量i=1;var vm=new Vue({<br>     el: '.box',<br>     data: {<br>         city: []<br>     },<br>     ready: function(){<br>         this.$http.get(url).then(function(response){<br>             this.city=response.data;<br>         })<br>     },<br> })然后呢;判断当滚动轴到底部的时候;
让i+1 作为get参数中的页数;
加载下一页的数据;并追加到city中;i++<br> vm.$http.get(pageData.url+'/p/'+pageData.i).then(function(response){<br>     // 用concat把下一页的数据追加到city中<br>     vm.city=vm.city.concat(response.data); <br> })三:完整的html;
/tpl/Home/Vue/web_page.html<!DOCTYPE html><br> <html><br> <head><br>     <meta charset="UTF-8"><br>     <title>Vue 配合thinkphp分页示例</title><br> </head><br> <body><br> <p></p><br> <p></p><br> <div><br>     <p v-for="item in city">{{item.name}}</p><br> </div><br> <br> <p>沒有資料了</p> <br> <br> <vue></vue><br> <script><br /> <br /> // 取得資料的url<br /> var pageData={<br />     url: "{:U('Home/Vue/page')}",<br />     i: 1,<br />     height: 0,<br />     over: false<br /> }<br /> var vm=new Vue({<br />     el: '.box',<br />     data: {<br />         city: []<br />     },<br />     ready: function(){<br />         this.$http.get(pageData.url).then(function(response){<br />             this.city=response.data;<br />         })<br />     },<br /> })<br /> <br /> <br /> //取得捲軸目前的位置 <br /> function getScrollTop() { <br />     var scrollTop=0; <br />     if(document.documentElement && document.documentElement.scrollTop){ <br />         scrollTop=document.documentElement.scrollTop; <br />     }else if(document.body) { <br />         scrollTop=document.body.scrollTop; <br />     } <br />     return scrollTop; <br /> } <br /> <br /> //取得目前可視範圍的高度 <br /> function getClientHeight() { <br />     var clientHeight=0; <br />     if(document.body.clientHeight && document.documentElement.clientHeight){ <br />         clientHeight=Math.min(document.body.clientHeight, document.documentElement.clientHeight); <br />     }else{ <br />         clientHeight=Math.max(document.body.clientHeight, document.documentElement.clientHeight); <br />     } <br />     return clientHeight; <br /> } <br /> <br /> //取得文件完整的高度 <br /> function getScrollHeight() { <br />     return Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); <br /> } <br /> <br /> // 新增 載入中樣式<br /> function addLoading(){<br />     var loading=document.createElement('p');<br />     loading.className='loading'<br />     loading.innerHTML='載入中...';<br />     document.body.appendChild(loading);<br /> }<br /> <br /> // 刪除 載入中樣式<br /> function removeLoading(){<br />     var loading=document.querySelector('.loading');<br />     loading.parentNode.removeChild(loading);<br /> }<br /> <br /> // 把載入中 改成 沒有資料了<br /> function loadingToOver(){<br />     var loading=document.querySelector('.over');<br />     loading.style.display='block';<br /> }<br /> <br /> // 監聽滾動事件<br /> window.onscroll=function () {<br />     if (pageData.over) {<br />         return false;<br />     }<br />     if ( getScrollHeight()-(getScrollTop()+getClientHeight())<=50 ) {<br />         // 頁數+1<br />         pageData.i++<br />         // 顯示載入<br />         addLoading();<br />         // 取得下一頁的資料<br />         vm.$http.get(pageData.url+'/p/'+pageData.i).then(function(response){<br />             removeLoading();<br />             if(response.data.length==0){<br />                 pageData.over=true;<br />                 loadingToOver();<br />            }else{<br />                 vm.city=vm.city.concat(response.data); <br />             }<br />         })<br />     } <br /> } <br /> <br /> <br /> </script><br>

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板