使用图像分页

时间:2014-04-30 20:07:45

标签: javascript php jquery angularjs pagination

好吧,我和朋友正在努力建立一个网站。它从两个目录中获取图片,并按时间顺序显示它们(图像名称是时间戳)。我们使用PHP创建一个JSON对象,并具有以下代码:

<?php

$files = array();

$dir = opendir('./dir1');
while ($file = readdir($dir)) {
    if ($file == '.' || $file == '..') {
        continue;
    }

    $files[] = array('name'=>($file), 'tag'=>"tag1");

}

$dir = opendir('./dir2');
while ($file = readdir($dir)) {
    if ($file == '.' || $file == '..') {
        continue;
    }

    $files[] = array('name'=>($file), 'tag'=>"tag2");

}

usort($files,function($b,$a) {return strnatcasecmp($a['name'],$b['name']);});

header('Content-type: application/json');
echo json_encode($files);

?>

我们有一个javascript文件,如下所示:

function PictureController2($scope, $http) {

    $http.get('pictest.php').success(function(data) {
        $scope.pictures = data;
    });

};

它由HTML处理以创建一个页面,该页面显示带有缩略图和图像名称的图像。不幸的是,它只在一页上,最终会有大量的图像,所以我们正在考虑分页。我们从另一个线程http://jsfiddle.net/2ZzZB/56/在jfiddle上找到了这个漂亮的代码,但是在将代码集成到那个代码中时遇到了麻烦。我们都是AngularJS的新手,所以我们不确定如何正确地将我们的计划与他们的计划结合起来。

1 个答案:

答案 0 :(得分:0)

下式给出:

$http.get('pictest.php').success(function(response) { 
    // this returns a promise, so you need to check the data
    $scope.pictures = response.data;
});

让我们说你的JSON返回是这样的:

$scope.pictures= {one: "/local/myimg1.jpg", two: "/local/someOther.jpg"}; // returned from service

然后您可以创建一个使用此$ scope数据的视图

<div ng-repeat="(key, value) in pictures"> <!-- repeat a div of pictures; key from above example would be 'one' and 'two'-->
    <!-- here, ng-src uses the value from the JSON, the web address, and if it can't find that (an error), then defaults to a different address  -->
    <img height=100 width=200 ng-src="value" onerror="this.src = 'images/ImageNotAvailable.png';"/> 
</div>

现在要添加分页,你有几个选项,你可以使用ng-show,ng-hide,ng-if和过滤器来限制显示的内容,或者使用你提供的链接中的过滤器:

app.filter('startFrom', function() {
    return function(input, start) {
        start = +start; //parse to int
        return input.slice(start);
    }
});

您可以将ng-repeat和div更改为以下内容:

<div ng-repeat="(key, value) in pictures | startFrom:currentPage*pageSize | limitTo:pageSize"">
    <img height=100 width=200 ng-src="value" onerror="this.src = 'images/ImageNotAvailable.png';"/> 
</div>

其中$ scope.currentPage和$ scope.pageSize在控制器中定义为整数


更新

<div ng-repeat="picture in pictures | startFrom:currentPage*pageSize | limitTo:pageSize"">
    <img height=100 width=200 ng-src="picture.name"/> 
</div>