19

このフィルターを機能させるのに問題があります。

$scope.imgCollection.then(function (images) {
    $scope.images = images.thisGal_images;

    if ($scope.images[0].order == '0') {
        console.log('orgName');
        $scope.images = $filter('orderBy')($scope.images, 'orgName');
    } else {
        console.log('sort order');
        $scope.images = $filter('orderBy')($scope.images, 'sortOrder');
        console.log($scope.images);
    }
});

$scope.images は、データベースから画像のリストを返します。最初のアップロードでは、ui:sortable を介して並べ替えることができるため、sortOrder 列には「0」が入力されます。したがって、最初のビューでは、ファイル名に基づいて並べ替えます。最初のビューの後、DB が書き込まれ、最初のイメージに sortOrder 1 が与えられ、そこからインクリメントされます。

これは私の $filter の誤解かもしれませんが、$scope.images = $filter('orderBy')($scope.images,'sortOrder');sortOrder に基づいて $scope.images を並べ替えていません。

ありがとう

4

1 に答える 1

41

デモを作成しましたので、コードを比較して問題を解決していただければ幸いです。

$filterモジュールを注入するのを忘れているかもしれません。デモをご覧ください。

<div ng-app="myApp" ng-controller="ctrl">
    <div ng-repeat="image in images">{{image}}</div>
    <button ng-click="order('0')">By orgName</button>
    <button ng-click="order('1')">By sortOrder</button>
</div>

var app = angular.module('myApp', []);

function ctrl($scope, $filter) {
    $scope.images = [{
        orgName: 'B',
        sortOrder: 111
    }, {
        orgName: 'A',
        sortOrder: 12
    }, {
        orgName: 'D',
        sortOrder: 13
    }, {
        orgName: 'C',
        sortOrder: 14
    }];

    $scope.order = function (order) {
        if (order == '0') {
            $scope.images = $filter('orderBy')($scope.images, 'orgName');
        } else {
            $scope.images = $filter('orderBy')($scope.images, 'sortOrder');
        }
    }
}

Working Demo

于 2013-08-30T20:52:20.053 に答える