歡迎關注BUI Webapp專欄
或者 bui神速
微信公衆號.html
以往文章:前端
點擊觀看視頻實錄vue
安裝完如下環境後, 從0到1, 手把手教, 你也能夠作到!
buijs
cli命令行工具(須要先安裝node環境, 建議使用node 8.x);如何安裝使用buijs?
bui-fast
快速編輯器插件(推薦vscode
);如何安裝使用bui-fast?
如何打開跨域的Chrome瀏覽器?
buijs
構建工程
buijs create demo
cd demo/ npm install
windows 推薦使用淘寶的
cnpm install
npm run dev
bui-fast
編輯器插件生成控件視頻裏使用的是vscode
能夠在安裝插件那裏找到 bui-fast
.node
xxx 假設爲控件名
生成規則1:es6
ui-xxx
生成控件結構ui-list
生成如下結構web
<div id="uiList" class="bui-scroll"> <div class="bui-scroll-head"></div> <div class="bui-scroll-main"> <ul class="bui-list"> </ul> </div> <div class="bui-scroll-foot"></div> </div>
bui-xxx
生成控件的初始化代碼bui-list
生成如下初始化代碼ajax
// 列表控件 js 初始化: var uiList = bui.list({ id: "#uiList", url: "http://rap2api.taobao.org/app/mock/84605/example/getNews", pageSize: 5, data: {}, //若是分頁的字段名不同,經過field從新定義 field: { page: "page", size: "pageSize", data: "data" }, callback: function(e) {}, template: function(data) { var html = ""; data.forEach(function(el, index) { html += `<li class="bui-btn bui-box"> <div class="bui-thumbnail"><img src="${el.image}" alt=""></div> <div class="span1"> <h3 class="item-title">${el.name}</h3> <p class="item-text">${el.address}</p> <p class="item-text">${el.distance}千米</p> </div> <span class="price"><i>¥</i>${el.price}</span> </li>` }); return html; } });
bui.list
看自動分頁設計原理
經常使用參數說明:chrome
滾動的第一要素就是高度, 當內容撐出容器的高度,纔會產生滾動條, 才能監聽id的滾動事件, 能夠知道是否已經滾動到底部, 到底部則自動發起新一頁的請求.npm
這裏咱們須要解決的第一個問題,就是高度, 因此咱們能夠傳height
參數,默認是0, 爲0,則會自動計算列表的頁面剩餘高度.segmentfault
有了高度之後, 咱們要計算請求返回的數據能不能撐開容器, 若是不行, 則自動請求下一頁, 直到容器被撐開, 因此你會看到pageSize
設置的值較小的時候, 頁面會發起第2次請求, 就是這個緣由.
咱們來看一下這個接口返回的數據是什麼?
http://rap2api.taobao.org/app/mock/84605/example/getNews
這個是淘寶的mock模擬接口,隨機返回數據, 返回一個
{data:[],info:"",status:""}
結構的數據.
{ data: [{ uid: 6801, name: "和再團之較", image: "http://dummyimage.com/200x134/4A7BF7&text=Thumbnail", phone: "17612327699", location: "惠城區", price: "65", distance: "52", status: 1, date: "2003-06-28", url: "gopher://brcce.cq/svku", email: "v.dmdtjgv@rwldcexzt.bi", time: "20:39:53", address: "海南省 三沙市 西沙羣島", detail: "式始衆組月他政例了部自革每往子。但本活又己交給音長爭標識我。八說前它特用達圓是路看江才。開次他爭從點軍容給油很出。成育料技所心並精北酸間辦元。除現七團一歷積動兩水礦花始線黨黨她。" }], info: "獲取成功", status: 0 }
那麼問題來了? 無論接口的規則是後端仍是前端定的, 控件並不事先知道接口的規則, 若是把規則限定死了, 那不少先開發接口再來學習移動端開發的還會選擇bui
框架嗎?
咱們來看看有沒有漏了什麼參數?
這個就是用來作數據請求的字段映射, 比方, 我請求的接口地址是http://rap2api.taobao.org/app/mock/84605/example/getNews
, 請求第幾頁是用的大寫 PAGES
請求每頁的大小 是用的 PAGESIZES
; 那麼 field 的配置應該爲:
{ page: 2, pageSize: 20, field: { page: "PAGES", size: "PAGESIZES" } }
那麼接口就會請求爲 http://rap2api.taobao.org/app/mock/84605/example/getNews?PAGES=2&PAGESIZES=20
; 這樣接口就能正常請求到對應的數據了, 那請求到之後的數據返回回來, 怎麼知道數據在什麼字段呢? 一樣也是在field
的 data
參數裏面配置;
{ page: 2, pageSize: 20, field: { page: "PAGES", size: "PAGESIZES", data: "data" } }
若是返回的數據是嵌套多個層級呢? 好比返回
{ result: { data: [{ uid: 6801, name: "和再團之較", image: "http://dummyimage.com/200x134/4A7BF7&text=Thumbnail", phone: "17612327699", location: "惠城區", price: "65", distance: "52", status: 1, date: "2003-06-28", url: "gopher://brcce.cq/svku", email: "v.dmdtjgv@rwldcexzt.bi", time: "20:39:53", address: "海南省 三沙市 西沙羣島", detail: "式始衆組月他政例了部自革每往子。但本活又己交給音長爭標識我。八說前它特用達圓是路看江才。開次他爭從點軍容給油很出。成育料技所心並精北酸間辦元。除現七團一歷積動兩水礦花始線黨黨她。" }], }, info: "獲取成功", status: 0 }
那麼咱們就要找到該數據返回的數組字段在哪裏? 你能夠這樣配置.
{ page: 2, pageSize: 20, field: { page: "PAGES", size: "PAGESIZES", data: "result.data" } }
咱們操做一下剛剛生成的控件, 會看到底部有沒有更多內容
字樣, 那怎麼知道是不是最後一頁了呢? 經過返回的數組大小
, 跟你請求的每頁大小
作比對, 若是小余pageSize
設置的值, 則認爲已是最後一頁了.
實際上就是把 bui.ajax
+bui.scroll
+bui.pullrefresh
幾個控件的通用需求整合在一塊, 這樣咱們就能夠解決數據接口+控件整合, 又能抽離業務的一個控件. 經過簡單配置,咱們能夠知足不少開發需求.
bui.scroll
控件;