1. 程式人生 > >Angular JS 上拉重新整理,下拉載入

Angular JS 上拉重新整理,下拉載入

前言:最近在做一個專案用的Angular1.x 寫了一些頁面,現在遇到一個問題,需要實現列表頁面的下拉重新整理及上拉載入。於是乎進行了各種百度,剛開始搜的是“js 上拉重新整理下拉載入”,可是發現搜出來的都是jq ajax 請求資料,與現在的angular載入資料的方式有所區別,顯然是用著是不太合適的。接著百度了“angular 上拉重新整理下拉載入”,開啟一看發現根本看不懂,無意間發現了《ionic》(之前從來沒見過,angular也是自學的),寫這個文章是為了讓自己以後遇到這種情況時可以參考,整合一下自己所查到的,方便你我。

ionic 簡介

ionic 是一個強大的 HTML5 應用程式開發框架(HTML5 Hybrid Mobile App Framework )。 可以幫助您使用 Web 技術,比如 HTML、CSS 和 Javascript 構建接近原生體驗的移動應用程式。

ionic 主要關注外觀和體驗,以及和你的應用程式的 UI 互動,特別適合用於基於 Hybird 模式的 HTML5 移動應用程式開發。

ionic是一個輕量的手機UI庫,具有速度快,介面現代化、美觀等特點。為了解決其他一些UI庫在手機上執行緩慢的問題,它直接放棄了IOS6和Android4.1以下的版本支援,來獲取更好的使用體驗。

ionic 特性

  • ionic 基於Angular語法,簡單易學。
  • ionic 是一個輕量級框架。
  • ionic 完美的融合下一代移動框架,支援 Angularjs 的特性, MVC ,程式碼易維護。
  • ionic 提供了漂亮的設計,通過 SASS 構建應用程式,它提供了很多 UI 元件來幫助開發者開發強大的應用。
  • ionic 專注原生,讓你看不出混合應用和原生的區別
  • ionic 提供了強大的命令列工具。
  • ionic 效能優越,執行速度快。

首先頭部需要引入以下檔案(如專案中引入以下檔案,則不用引入angular.js,如果引入angular.js重新整理載入無效)

<link href="https://cdn.bootcss.com/ionic/1.3.2/css/ionic.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/ionic/1.3.2/js/ionic.bundle.min.js"></script>

下拉重新整理

<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title>菜鳥教程(runoob.com)</title>
<link href="https://cdn.bootcss.com/ionic/1.3.2/css/ionic.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/ionic/1.3.2/js/ionic.bundle.min.js"></script>
<script type="text/javascript">
angular.module('starter', ['ionic']).run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if(window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }
  });
}).controller('actionsheetCtl', ['$scope', '$timeout', '$http', function($scope, $timeout, $http) {
  $scope.items = [{
    "name": "HTML5"
  }, {
    "name": "JavaScript"
  }, {
    "name": "Css3"
  }];
  $scope.doRefresh = function() {
    $http.get('http://www.runoob.com/try/demo_source/item.json') //注意改為自己本地的地址,不然會有跨域問題
      .success(function(newItems) {
        $scope.items = newItems;
      }).finally(function() {
        $scope.$broadcast('scroll.refreshComplete');
      });
  };
}])
</script>
</head>
<body ng-app="starter" ng-controller="actionsheetCtl">
<ion-pane>
  <ion-content>
    <ion-refresher pulling-text="下拉重新整理" on-refresh="doRefresh()"></ion-refresher>
    <ion-list>
      <ion-item ng-repeat="item in items" ng-bind="item.name"></ion-item>
    </ion-list>
  </ion-content>
</ion-pane>
</body>
</html>

上拉載入

以下程式碼僅供參考

<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title>菜鳥教程(runoob.com)</title>
<link href="https://cdn.bootcss.com/ionic/1.3.2/css/ionic.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/ionic/1.3.2/js/ionic.bundle.min.js"></script>
<script type="text/javascript">
angular.module('starter', ['ionic']).run(function($ionicPlatform) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if(window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }
  });
}).controller('actionsheetCtl', ['$scope', '$timeout', '$http', function($scope, $timeout, $http) {
  $scope.items = [{
    "name": "HTML5"
  }, {
    "name": "JavaScript"
  }, {
    "name": "Css3"
  }];
  $scope.hasMore = false;
  $scope.doRefresh = function() {
    $scope.pagenum = 1;//每次重新整理都是第一頁
    $http({
	  method: 'get',
	  url: IP + 'activity',
	  params: {
		'pagenum': $scope.pagenum,//第幾頁
		'pagesize': $scope.pagesize//一頁幾條
	  }
	}).then(function successCallback(response) {
	   if(有資料){
         $scope.hasMore = true;
       }else {
         $scope.hasMore = false;//沒有資料阻止上拉載入
       }
	}, function errorCallback(response) {
	  alert('請求引數錯誤!');
	  return false;
	}).finally(function() {
	  $scope.$broadcast('scroll.infiniteScrollComplete');//請求成功之後載入事件結束
	});
  };
  $scope.loadMore= function() {
    $scope.pagenum += 1;
    $http({
	  method: 'get',
	  url: IP + 'activity',
	  params: {
		'pagenum': $scope.pagenum,
		'pagesize': $scope.pagesize
	  }
	}).then(function successCallback(response) {
	  if(有資料){
        $scope.hasMore = true;
      }else {
        $scope.hasMore = false;//沒有資料阻止上拉載入
      }
	}, function errorCallback(response) {
	  alert('請求引數錯誤!');
	  return false;
	}).finally(function() {
	  $scope.$broadcast('scroll.infiniteScrollComplete');//請求成功之後載入事件結束
	});
  };
}])
</script>
</head>
<body ng-app="starter" ng-controller="actionsheetCtl">
<ion-pane>
  <ion-content>
    <ion-refresher pulling-text="下拉重新整理" on-refresh="doRefresh()"></ion-refresher>
    <ion-list>
      <ion-item ng-repeat="item in items" ng-bind="item.name"></ion-item>
    </ion-list>
    <ion-infinite-scroll ng-if='hasMore' on-infinite="loadMore()" distance="1%"></ion-infinite-scroll>
  </ion-content>
</ion-pane>
</body>
</html>
 

最後發現一個bug:頁面載入就會執行一次下拉載入方法