Angularjs:控制器中的$ filter

时间:2013-08-30 20:07:32

标签: angularjs

让此过滤器工作有问题。

$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列填充为'0',因为它们可以通过ui:sortable进行排序。因此,在初始视图中,我将排序顺序基于文件名。在初始视图之后写入DB并且第一个图像被赋予sortOrder为1并从那里递增。

这可能是我对$ filter的误解,但$scope.images = $filter('orderBy')($scope.images,'sortOrder');并没有根据sortOrder命令我的$ scope.images。

由于

1 个答案:

答案 0 :(得分:39)

我为您创建了一个演示,希望您可以比较代码并找出问题。

我猜你可能会忘记注入$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