2013-08-30 9 views
17

このフィルタを使用する際に問題が発生しました。

$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は、データベースから画像のリストを返します。最初のアップロード時には、sortOrder列にはui:sortableを使用してソートできるため、「0」が設定されます。最初のビューでは、ソート順をファイル名に基づいています。最初のビューの後にDBが書き込まれ、最初のイメージにはsortOrderが1で与えられ、そこからインクリメントされます。

これは私の誤解で$ filterですが、$scope.images = $filter('orderBy')($scope.images,'sortOrder');はsortOrderに基づいて$ scope.imagesを注文していません。

おかげ

+0

どのようにそれはあなたのイメージを注文されましたか?正確に何が起こっているのですか、何が起こりたいですか?あなたは小さな例を挙げることができますか? –

+0

'sortOrder'の型は何ですか?文字列かint? – zsong

+0

@sza、ありがとう - INT – Bungdaddy

答えて

37

私はあなたのためのデモを作成し、うまくいけば、あなたはコードを比較し、問題を把握することができます。

$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

+0

よく見ると、sortOrderでソートすると、DBのINTに設定されているように見えます。画像は注文されています:1,10,11,12,2,3,4,5,6などです。おそらくPHPの – Bungdaddy

+1

@Bungdaddy Yepでjsonの文字列に変換されているので、intに変換する必要があります。 – zsong

+0

ありがとう、それが鍵だった。例は、私がJSFiddleのために – Bungdaddy