Angular JS 上拉重新整理,下拉載入
阿新 • • 發佈:2019-02-01
前言:最近在做一個專案用的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:頁面載入就會執行一次下拉載入方法