genglang 2016-05-01
ionic html标签代码,其中使用ion-infinite-scroll实现下拉分页
<ion-header-bar class=""> <a class="button button-clear" ui-sref="index"> <span class="icon ion-ios-arrow-left"> </span> </a> <h1 class="title"> 推荐会员总数{{total}} </h1> </ion-header-bar> <style> .popup-container.popup{width:95%;border-radius:5px} </style> <ion-content> <!-- 注意ion-infinite-scroll标签的开始和结束位置 当用户到达页脚或页脚附近时,ionInfiniteScroll指令允许你调用一个函数 。 当用户滚动的距离超出底部的内容时,就会触发你指定的on-infinite。 设置ion-infinite-scroll控件的高度为1个像素,不然不显示,控件显示不出来 --> <ion-infinite-scroll on-infinite="doRefresh()" distance="5%" style="height: 1px;" ng-if="hasData()"> </ion-infinite-scroll> <ul class="list"> <li class="item bg_ff"> <span> 直接会员: </span> <span> {{level1}} </span> </li> <li class="item item-avatar" ng-repeat="item in lists"> <img src="{{item.img}}" class="img_responsive width_40px float_left" ng-click="userInfo({{item.uid}})"> <p class=" line_height_35px" style="font-size: 18px;"> <span class="float_left"> {{item.username}} </span> <span class="float_right" ng-click="showMyMemberList({{item.uid}})"> <span class="margin_right_10"> {{item.num}} </span> <span class="icon ion-ios-arrow-right font_20 color_99 "> </span> </span> <span class="clear_both"> </span> </p> </li> </ul> </ion-content>
注意:
1、ion-infinite-scroll标签的位置——在容器的顶部,并且不包含任何内容
2、为了不显示加载内容,设置style="height:1px;"
3、当滚动条到底部,并且服务器没有数据的时候,使用ng-if指令来控制便签是否存在,即,是否继续向服务器发送请求(如果没有这个功能,会不停的向服务器发送请求)
注意:由于有ng-if="hasData()"来控制是否需要继续加载,在控制器中一定要添加这个方法,否则默认是不显示的。
控制器
//查看我的会员 .state('myMemberList', { url: '/myMemberList', templateURL:'abc.html', onEnter :function(){ //因此底部的导航栏 $(".index_footer").hide(); }, onExit : function(){ }, controller:["$scope","$state","$ionicPopup",'myMemberListService', function($scope,$state,$ionicPopup,myMemberListService){ //获取我的直属会员的数量 myMemberListService.getMyUsersNum($scope); //第一进来访问页面标记 $scope.pageNumber = 0; $scope.lists = []; //第一次是有数据的 $scope.isHaveData = true; $scope.doRefresh = function(){ $scope.pageNumber = $scope.pageNumber + 1; //获取我的直属会员的list列表 myMemberListService.getMyUsersList($scope); }; //获取用户的详细信息 $scope.userInfo = function(myuid){ myMemberListService.getMyUserInfo(myuid); }; //查看二级会员列表 $scope.showMyMemberList = function(myuid){ window.location.href = '#/myMemberOfMember/'+myuid; }; //是否是底部 $scope.hasData = function(){ return $scope.isHaveData; } }] })
注意:
1、第一次进来就会执行“doRefresh”方法
2、初始化$scope.pageNumber=0,每次进入doRefresh方法就加一
server服务
//查看我的会员 .factory("myMemberListService",["$http","$ionicPopup",function($http,$ionicPopup){ return { //获取我的直属会员账号数量 和 第二级会员账号和 getMyUsersNum : function(__scope__){ //请求的URL var myurl = "{:U('MemberInfo/myTotalMembers')}"; var promise = $http.get(myurl); promise.success(function(response, status, headers, config){ if(response.error == 0){ __scope__.total = response.total; __scope__.level1 = response.level1; } }); }, //获取直属会员的list数量 getMyUsersList : function(__scope__){ //请求的URL var myurl = "{:U('MemberInfo/myLevel1Members')}"; //发送分页请求 var configObj = { params: { "page":__scope__.pageNumber } }; var promise = $http.get(myurl,configObj); promise.success(function(response, status, headers, config){ if(response.error == 0){ var lists = __scope__.lists; //如果获取到的数据不为空 if(response.data != null && response.data !="" && response.data !=undefined){ //获取数据,在原来的数据基础上追加信息 if(lists.length > 0 ){ __scope__.lists = new Array().concat(lists, response.data); }else{ __scope__.lists = response.data; } //如果查询的数据不到20,表示已经没有数据了 if(response.data.length <20){ __scope__.isHaveData = false; } }else{ //如果数据为空 __scope__.isHaveData = false; } __scope__.$broadcast('scroll.infiniteScrollComplete'); } }); }, //获取会员推荐的会员list getMemberOfMemberList : function(__scope__,myuid){ //请求的URL var myurl = "{:U('MemberInfo/myLevel2Members')}"; //发送分页请求 var configObj = { params: { "page":1, "uid":myuid } }; var promise = $http.get(myurl,configObj); promise.success(function(response, status, headers, config){ if(response.error == 0){ var lists = __scope__.lists; //如果获取到的数据不为空 if(response.data != null && response.data !="" && response.data !=undefined){ //获取数据,在原来的数据基础上追加信息 if(lists.length > 0 ){ __scope__.lists = new Array().concat(lists, response.data); }else{ __scope__.lists = response.data; } __scope__.countMember = response.num; //如果查询的数据不到20,表示已经没有数据了 if(response.data.length <20){ __scope__.isHaveData = false; } }else{ //如果数据为空 __scope__.isHaveData = false; } __scope__.$broadcast('scroll.infiniteScrollComplete'); } }); }, //查看用户信息 getMyUserInfo : function(uid){ //请求的URL var myurl = "{:U('MemberInfo/myMemberDetail')}"; //发送分页请求 var configObj = { params: { "uid":uid } }; var promise = $http.get(myurl,configObj); promise.success(function(response, status, headers, config){ if(response.error == 0){ var uesrInfo = response.data; var alertPopup = $ionicPopup.alert({ title: '个人名片', template: '<ul class="list"><li class="item item-avatar"style="padding-top: 10px;padding-bottom: 10px;"><img src="'+uesrInfo.img+'"class="img_responsive width_40px float_left"><p class=" line_height_35px"style="font-size: 18px;"><div class="float_left line_height_40px"style="font-size: 12px;width: 90px;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;">'+uesrInfo.name+'</div><div class="float_right font_12"ng-click="showMyMemberList()"><div class="color_ca0500 text-center">'+uesrInfo.contribution+'</div><div class="color_99">贡献金额</div></div><span class="clear_both"></span></p></li><li class="item bg_ff"><span>联系电话:</span><span>'+uesrInfo.mobile+'</span></li><li class="item bg_ff"><span>收货地址:</span><span>'+uesrInfo.address+'</span></li></ul>' }); alertPopup.then(function() { }); } }); } } }])
注意:
1、我这里规定的是一页显示20条数据(与后台约定的),当查询的数据小于20条表示已经到底部了
2、如果要触发下拉方法on-infinite事件,必须使用$scope.$broadcast('scroll.infiniteScrollComplete');