Exploring Ionic Lists
Infinite Lists
由于手机不适合使用多页面显示posts,Infinite Lists成为各种新闻、咨询类app的标配。为了在ionic框架中使用到Infinite Lists,我们首先学习ion-list。
ion-list
ion-list使用
在ionic中,通过使用ion-list和ion-item来展示数据,通过ng-repeat循环输出,如demo(使用ionic start mydemo tabs命令生成ionic demo)中的templates/tab-friends.html中显示:
	<ion-list>
      <ion-item ng-repeat="friend in friends" type="item-text-wrap" href="#/tab/friend/{{friend.id}}">
    	{{friend.name}}
	  </ion-item>
    </ion-list>
假如我们返回到html的数据,每次都为20项,则但屏幕划到最后一项或前几项时,则需要监听检测到,并且载入下一个20项数据,从而达到无止境的下滑刷新载入更多的目标。这里,ionic提供了ion-infinite-scroll directive。
ion-infinite-scroll function is more like a scroll detector: it detects when a user is scrolled to a given point above the bottom of the view (default 1%, or 99% of the way down), and executes a function.
所以需要在html中添加这个directive,如下:
    <ion-list>
  		<ion-item ng-repeat="friend in friends" type="item-text-wrap" href="#/tab/friend/{{friend.id}}">
	        {{friend.name}}
  		</ion-item>
  		<ion-infinite-scroll on-infinite="addFriends()"></ion-infinite-scroll>
	</ion-list>
在controller中添加addFriends()函数,和载入数据。
同时,在重新完全载入数据后,需要发送一个scroll.infiniteScrollComplete事件,告诉directive,我们完成了这个动作,系统会清理scroller和为下一次的载入数据,重新绑定这一事件。
修改friends controller
通过修改controller,让list一次载入20个friends数据,这样达到Infinite Lists效果,如下修改js/controllers.js中FriendsCtrl:
.controller('FriendsCtrl', function($scope, Friends) {
	var currentStart = 0;
	$scope.friends = [];
  $scope.addFriends = function() {
	for (var i = currentStart; i < currentStart+20; i++) {
  		$scope.friends.push(Friends.get(currentStart));
	}
    currentStart += 20;
    $scope.$broadcast('scroll.infiniteScrollComplete');
};
$scope.addFriends();
//$scope.friends = Friends.all();
})
service添加mock数据
在service端,调用Friends factory如下:
.factory('Friends', function() {
// Might use a resource here that returns a JSON array
// Some fake testing data
var friends = [
	{ id: 0, name: 'Scruff McGruff' },
    { id: 1, name: 'G.I. Joe' },
	{ id: 2, name: 'Miss Frizzle' },
    { id: 3, name: 'Ash Ketchum' },
	{ id: 4, name: 'Scruff McGruff' },
    { id: 5, name: 'G.I. Joe' },
	{ id: 6, name: 'Miss Frizzle' },
    { id: 7, name: 'Ash Ketchum' },
	{ id: 8, name: 'Scruff McGruff' },
    { id: 9, name: 'G.I. Joe' },
	{ id: 10, name: 'Miss Frizzle' },
    { id: 11, name: 'Ash Ketchum' },{ id: 0, name: 'Scruff McGruff' },
	{ id: 12, name: 'G.I. Joe' },
    { id: 13, name: 'Miss Frizzle' },
	{ id: 14, name: 'Ash Ketchum' },
    { id: 15, name: 'Scruff McGruff' },
	{ id: 16, name: 'G.I. Joe' },
    { id: 17, name: 'Miss Frizzle' },
	{ id: 18, name: 'Ash Ketchum' },
    { id: 19, name: 'Scruff McGruff' },
	{ id: 20, name: 'G.I. Joe' },
    { id: 21, name: 'Miss Frizzle' },
	{ id: 22, name: 'Ash Ketchum' },
    { id: 23, name: 'Scruff McGruff' },
	{ id: 24, name: 'G.I. Joe' },
    { id: 25, name: 'Miss Frizzle' },
	{ id: 26, name: 'Ash Ketchum' },
    { id: 27, name: 'Scruff McGruff' },
	{ id: 28, name: 'G.I. Joe' },
    { id: 29, name: 'Miss Frizzle' },
	{ id: 30, name: 'Ash Ketchum' },
    { id: 31, name: 'Scruff McGruff' },
	{ id: 32, name: 'G.I. Joe' },
    { id: 33, name: 'Miss Frizzle' },
	{ id: 34, name: 'Ash Ketchum' },
    { id: 35, name: 'Scruff McGruff' },
	{ id: 36, name: 'G.I. Joe' },
    { id: 37, name: 'Miss Frizzle' },
	{ id: 38, name: 'Ash Ketchum' },
	{ id: 39, name: 'Scruff McGruff' }
  ];
return {
	all: function() {
      return friends;
	},
    get: function(friendId) {
	  // Simple index lookup
  	return friends[friendId];
	}
}
测试
使用python命令,测试:
python -m SimpleHTTPServer 8000
ion-infinite-scroll 参数
<ion-content ng-controller="MyController">
  	<ion-infinite-scroll
		on-infinite="loadMore()"
		distance="1%">
	</ion-infinite-scroll>
</ion-content>
主要有三个参数:
- on-infinite:expression;含义:What to call when the scroller reaches the bottom. 
- distance (optional) string; 含义:The distance from the bottom that the scroll must reach to trigger the on-infinite expression. Default: 1%. 
- icon(optional) string;含义:The icon to show while loading. Default: 'ion-loading-d'. 
也可以添加ng-if来判断是否还有更多数据可以载入,如:
<ion-infinite-scroll
  	ng-if="moreDataCanBeLoaded()"
	icon="ion-loading-c"
	on-infinite="loadMoreData()">
</ion-infinite-scroll>
更多的ion-list使用,参照官网
Exploring Ionic Lists的更多相关文章
- Ionic2系列——Ionic 2 Guide 官方文档中文版
		最近一直没更新博客,业余时间都在翻译Ionic2的文档.之前本来是想写一个入门,后来觉得干脆把官方文档翻译一下算了,因为官方文档就是最好的入门教程.后来越翻译越觉得这个事情确实比较费精力,不知道什么时 ... 
- Ionic实战 自动升级APP(Android版)
		Ionic 框架介绍 Ionic是一个基于Angularjs.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户 ... 
- Ionic 2.0.0-rc.1 发布,HTML5 移动应用框架
		Ionic 2.0.0-rc.1 发布了,Ionic Framework 是个高级的 HTML5 移动端应用框架,是个很漂亮的使用 HTML5 开发混合移动应用前端框架.本次更新内容如下: Bug 修 ... 
- [转]Ionic – Mobile UI Framework for PhoneGap/Cordova Developers
		本文转自:http://devgirl.org/2014/01/20/ionic-mobile-ui-framework-for-phonegapcordova-developers/ Ionic i ... 
- [转]Cordova + Ionic in Visual Studio - 101 Tutorial [Part I]
		本文转自:http://binarylies.ghost.io/cordova-ionic-in-visual-studio/ Hi everyone, I thought about lending ... 
- Ionic 2 Guide
		Ionic 2 Guide 最近一直没更新博客,业余时间都在翻译Ionic2的文档.之前本来是想写一个入门,后来觉得干脆把官方文档翻译一下算了,因为官方文档就是最好的入门教程.后来越翻译越觉得这个事情 ... 
- WebApp开发框架Ionic+AngularJS+Cordova
		目前的手机APP有三类:原生APP.WebAPP.HybridApp:HybridApp结合了前两类APP各自的优点,越来越流行. Ionic Ionic是一个新的.可以使用HTML5构建混合移动应用 ... 
- Hybrid UI framework shootout: Ionic vs. Famo.us vs. F7 vs. OnsenUI
		1 Introduction In the past 2 years I’ve been working intensively on mobile applications, mostly hybr ... 
- ionic学习教程地址梳理
		Ionic是一个新的.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户界面范例,例如像列表(lists).标签 ... 
随机推荐
- ubuntu安装redis
			1.下载安装root@21ebdf03a086:/# apt-cache search redisroot@21ebdf03a086:/# apt-get install redis-server a ... 
- paip.提升性能---mysql 性能 测试以及 参数调整.txt
			paip.提升性能---mysql 性能 测试以及 参数调整.txt 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://b ... 
- iframe父子页面调用小结
			子页面调用父页面 $('#Id', window.parent.document); //调用父页面元素 window.parent.func1(); //调用父页面方法 (子页面同理,需将js方 ... 
- [原创]Windows Phone SDK下载
			[原创]Windows Phone SDK下载 http://dev.windowsphone.com/zh-cn/downloadsdk 
- 分享45个设计师应该见到的新鲜的Web移动设备用户界面PSD套件
			对于一个网页设计师来说做一个好的PSD模板是非常有挑战性的一项任务,虽然PSD的模板简化了设计任务,但找出高质量的PSD文件,可以自由使用,是一 项艰巨的任务.你必须通过许多网页去找出一个极少数的PS ... 
- 使用Enitity Framework实现增删改查服务中的一些通用思路
			添加 → 方法参数中有一个有关添加视图模型类型的形参,比如vm→ 根据vm的某个属性,比如Name判断在上下文中是否存在,如果不存在就抛EntityNotFoundException异常→ 判断vm所 ... 
- (转)Shadow Map & Shadow Volume
			转自:http://blog.csdn.net/hippig/article/details/7858574 shadow volume 这个术语几乎是随着 DOOM3 的发布而成为FPS 玩家和图形 ... 
- 从零开始--系统深入学习IOS(使用Swift---带链接)
			这是一篇面向IOS新手的文档.同时提供一些系统知识的链接,让你系统学习IOS.它提供一些信息帮助你采用技术和编程接口来开发苹果软件产品,本人不保证会在将来更新.学习它,需要你掌握一些基本的编程知识 1 ... 
- JAVA生产者消费者的实现
			春节回了趟老家,又体验了一次流水席,由于桌席多,导致上菜慢,于是在等待间,总结了一下出菜流程的几个特点: 1.有多个灶台,多个灶台都在同时做菜出来. 2.做出来的菜,会有专人用一个托盘端出来,每次端出 ... 
- python查找算法的实现-二分法
			1.算法:(设查找的数组期间为array[low, high]) (1)确定该期间的中间位置K(2)将查找的值T与array[k]比较.若相等,查找成功返回此位置:否则确定新的查找区域,继续二分查找. ... 
