更新時間:2022-04-13 來源:黑馬程序員 瀏覽量:
滾動刷新在移動App中的應(yīng)用十分廣泛,例如實現(xiàn)商品列表時,由于移動App頁面大小有限,不能一次性將所有商品全部展示,這時,如果想瀏覽更多商品,可以通過滾動刷新的方式來加載數(shù)據(jù),當(dāng)沒有更多商品時,對用戶做出提示沒有更多商品。
ionic中提供了ion-infinite-scroll指令用于滾動刷新功能,該功能適用于瀑布流式(無限數(shù)據(jù)查詢)頁面,示例代碼如下所示。
<ion-infinite-scrollon-infinite="loadMore()" distance="1%"> ... </ion-infinite-scroll>使用ion-infinite-scroll指令時,當(dāng)容器滾動到或接近頁面底部會觸發(fā)獲取數(shù)據(jù)的事件on-infinite,事件處理函數(shù)完成新內(nèi)容數(shù)據(jù)的加載后,需要調(diào)用scroll.infiniteScrollComplete事件廣播來通知頁面更新滾動視圖,該事件的功能類似于在AngularJS中$scope.$apply()臟數(shù)據(jù)檢查,作用是通知頁面中所有組件數(shù)據(jù)已經(jīng)加載完成,可以更新到頁面。
ion-infinite-scroll指令組件中提供的屬性和事件如表10-4所示。
接下來通過一個案例來演示ion-infinite-scroll的使用方法,如demo10-4.html所示。
demo10-4.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <metaname="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> <title> 滾動刷新:ion-infinite-scroll </title> <link href="lib/ionic/css/ionic.css" rel="stylesheet"> <script src="lib/ionic/js/ionic.bundle.min.js"> </script> </link> </metaname="viewport"> </meta> </head> <body ng-app="starter"> <ion-header-bar class="bar-positive"> <h4> 這里是頭部 </h4> </ion-header-bar> <ion-content ng-controller="myCtrl"> <ul class="list"> <li class="item" ng-repeat="item in items"> {{item}} </li> <li class="item" ng-if="!moreDataCanBeLoaded()"> 沒有更多數(shù)據(jù)嘍 </li> </ul> <ion-infinite-scroll distance="1%" ng-if="moreDataCanBeLoaded()" on-infinite="loadMore()"> </ion-infinite-scroll> </ion-content> <ion-footer-bar class="bar-positive"> <h4> 這里是底部 </h4> </ion-footer-bar> </body> <script> //定義控制器 angular.module("starter",["ionic"]).controller("myCtrl",function($scope,$timeout){ //初始化加載更多數(shù)據(jù)的次數(shù) $scope.loadTimes=1; //定義判斷是否可以加載更多數(shù)據(jù)的函數(shù)33$scope.moreDataCanBeLoaded=function(){ return $scope.loadTimes>0; } //初始化數(shù)據(jù) $scope.items=[]; for(var i=1;i<=20;i++){ $scope.items.push("第"+i+"條數(shù)據(jù)"); } //頁面滾動到底部需要調(diào)用的方法 $scope.loadMore = function() { //定義定時器,延時加載可以看到加載圖標(biāo)效果 $timeout(function () { $scope.loadTimes=$scope.loadTimes-1; //加載完畢通知容器更新滾動視圖(收起圖標(biāo)) $scope.$broadcast('scroll.infiniteScrollComplete'); }, 1000); } }); </script> </html>
上述代碼中,使用模擬延時加載數(shù)據(jù)的效果,來演示ion-infinite-scroll組件的使用方法,ion-infinite-scroll組件必須嵌套在ion-content中。
第31行定義的loadTimes屬性代表加載次數(shù),第37~40行用于定義初始化數(shù)據(jù)。本案例定義了20條數(shù)據(jù),共加載兩次,每次加載10條數(shù)據(jù)。
第42行定義loadMore()函數(shù),在第19行為該函數(shù)綁定on-infinite事件,當(dāng)頁面滾動到底部時,調(diào)用loadMore()函數(shù),在loadMore()函數(shù)中添加定時器是為了實現(xiàn)延時加載,看到加載圖標(biāo)的效果。
使用Chrome瀏覽器訪問demo10-4.html,頁面默認加載了10條數(shù)據(jù)如圖10-6所示。
圖10-6demo10-4.html頁面效果在圖10-6的頁面向下滑動鼠標(biāo),可以看到加載時顯示圖標(biāo)效果,如圖10-7所示。
圖10-7加載圖標(biāo)
加載完畢后,頁面底部會提示沒有更多數(shù)據(jù),該效果為自定義設(shè)置,頁面效果如圖10-8所示。
圖10-8加載完畢后隱藏圖標(biāo)