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>

主要有三个参数:

  1. on-infinite:expression;含义:What to call when the scroller reaches the bottom.

  2. distance (optional) string; 含义:The distance from the bottom that the scroll must reach to trigger the on-infinite expression. Default: 1%.

  3. 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的更多相关文章

  1. Ionic2系列——Ionic 2 Guide 官方文档中文版

    最近一直没更新博客,业余时间都在翻译Ionic2的文档.之前本来是想写一个入门,后来觉得干脆把官方文档翻译一下算了,因为官方文档就是最好的入门教程.后来越翻译越觉得这个事情确实比较费精力,不知道什么时 ...

  2. Ionic实战 自动升级APP(Android版)

    Ionic 框架介绍 Ionic是一个基于Angularjs.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户 ...

  3. Ionic 2.0.0-rc.1 发布,HTML5 移动应用框架

    Ionic 2.0.0-rc.1 发布了,Ionic Framework 是个高级的 HTML5 移动端应用框架,是个很漂亮的使用 HTML5 开发混合移动应用前端框架.本次更新内容如下: Bug 修 ...

  4. [转]Ionic – Mobile UI Framework for PhoneGap/Cordova Developers

    本文转自:http://devgirl.org/2014/01/20/ionic-mobile-ui-framework-for-phonegapcordova-developers/ Ionic i ...

  5. [转]Cordova + Ionic in Visual Studio - 101 Tutorial [Part I]

    本文转自:http://binarylies.ghost.io/cordova-ionic-in-visual-studio/ Hi everyone, I thought about lending ...

  6. Ionic 2 Guide

    Ionic 2 Guide 最近一直没更新博客,业余时间都在翻译Ionic2的文档.之前本来是想写一个入门,后来觉得干脆把官方文档翻译一下算了,因为官方文档就是最好的入门教程.后来越翻译越觉得这个事情 ...

  7. WebApp开发框架Ionic+AngularJS+Cordova

    目前的手机APP有三类:原生APP.WebAPP.HybridApp:HybridApp结合了前两类APP各自的优点,越来越流行. Ionic Ionic是一个新的.可以使用HTML5构建混合移动应用 ...

  8. 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 ...

  9. ionic学习教程地址梳理

    Ionic是一个新的.可以使用HTML5构建混合移动应用的用户界面框架,它自称为是"本地与HTML5的结合".该框架提供了很多基本的移动用户界面范例,例如像列表(lists).标签 ...

随机推荐

  1. JavaScript:最烂与最火

    ============================================================================== 一.世无英雄,遂使竖子成名 1 Web客户 ...

  2. (转)雅虎WEB前端网站优化 -- 34条军规

    雅虎给出了优化网站加载速度的34条法则(包括Yslow规则22条) 详细说明,下载转发 ponytail 的译文(来自帕兰映像). 1.Minimize HTTP Requests 减少HTTP请求 ...

  3. C语言实现单链表-03版

    在C语言实现单链表-02版中我们只是简单的更新一下链表的组织方式: 它没有更多的更新功能,因此我们这个版本将要完成如下功能: Problem 1,搜索相关节点: 2,前插节点: 3,后追加节点: 4, ...

  4. Leetcode 342 Power of Four 数论

    题意:判断一个数是不是4的幂数,和Power of two类似. 先判断num是否大于0,再判断num是否能开根号,最后判断num开根号后的数是否是2^15的约数. 提示:4的幂数开根号就是2的幂数. ...

  5. js系列(8)简介

        JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HT ...

  6. 使用Reveal查看任意App的技巧

    转:http://www.jianshu.com/p/4dc8f94ca27c 前言 Reveal(http://revealapp.com)是一个很强大的iOS View Hierarchy工具,与 ...

  7. lpxelinux启动linux

          搭建环境: boot file 指定 lpxelinux.0 拷贝 lpxelinux.0 和 ldlinux.c32 到 tftp目录下. 新建pxelinux.cfg 文件夹, 里面放 ...

  8. Cracking Story - How I Cracked Over 122 Million SHA1 and MD5 Hashed Passwords

    This is the story about how I cracked 122 million* password hashes with John the Ripper and oclHashc ...

  9. Mysql自动备份工具1.0(2013年11月15日更新)

    Mysql自动备份工具1.0 下载地址 2013-11-15 1.解决日历控件在Windows7/8/8.1环境下遮挡按钮问题:2.解决按月备份当月没有该日期问题: 2013-11-13 1.Mysq ...

  10. JAX-RS(基于Jersey) + Spring 4.x + MyBatis构建REST服务架构

    0. 大背景 众所周知,REST架构已经成为现代服务端的趋势. 很多公司,已经采用REST作为App, H5以及其它客户端的服务端架构. 1. 什么是JAX-RS? JAX-RS是JAVA EE6 引 ...