第7讲 实现下拉刷新上拉加载ion-refresher和ion-infinite-scroll
1.将tab1.html的代码改为如下:
<ion-content> <ion-refresher pulling-text="下拉刷新" on-refresh="doRefresh()"></ion-refresher> <ion-slide-box show-pager="false" on-slide-changed="slideChanged($index)"> <ion-slide ng-repeat="slide in slides"> <div class="list has-header"> <a ng-repeat="item in items" class="item item-thumbnail-right item-text-wrap" href="#"> <img ng-src="{{imgUrl+item.img}}" width="30" height="30" alt=""> <h3>{{item.title}}</h3> <p>{{item.description | substring:item.description}}</p> </a> </div> <ion-infinite-scroll ng-if="!hasmore" on-infinite="loadMore()" distance="1%"> </ion-infinite-scroll> </ion-slide> </ion-slide-box> </ion-content>
2.controller.js层Tab1Ctrl的实现
.controller('Tab1Ctrl', function ($scope, Tab1Service, $ionicSlideBoxDelegate, $ionicTabsDelegate) { var page = 1,isLock=false; $scope.items = []; $scope.loadMore = function () { if(isLock)return; isLock=true; Tab1Service.getList(classify[0].url, page).success(function (response) { console.log(page) if (response.tngou.length == 0) { $scope.hasmore = true; return; } page++; $scope.items = $scope.items.concat(response.tngou); }).finally(function (error) { isLock = false; $scope.$broadcast('scroll.infiniteScrollComplete'); $scope.$broadcast('scroll.refreshComplete'); }); }; $scope.doRefresh = function () { page = 1; $scope.items = []; $scope.loadMore(); } })
3.代码解释
上面菜单部分使用了Tab组建,中间的列表部分使用SlideBox,并不存在任何嵌套,只是在各自选择的时候做一些处理。
- ion-refresher标签:下拉刷新的效果,下拉时触发doRefresh。
- ion-infinite-scroll标签:上拉加载的效果 。
- islock:锁,防止在网络慢的时候多次请求。
- hasmore:在最后一页的时候禁止触发加载更多。