Подтвердить что ты не робот

Angularjs: $filter в контроллере

У вас возникли проблемы с работой фильтра.

$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. Поэтому в исходном представлении я основываю порядок сортировки на имя файла. После первоначального представления БД записывается, и первому изображению присваивается sortOrder 1 и приращения оттуда.

Это может быть мое непонимание фильтра $, но $scope.images = $filter('orderBy')($scope.images,'sortOrder'); не заказывает мои $scope.images на основе sortOrder.

Спасибо

4b9b3361

Ответ 1

Я создал демо для вас, и, надеюсь, вы сможете сравнить код и выяснить проблему.

Я думаю, вы можете забыть ввести модуль $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');
        }
    }
}

Рабочий демонстрационный пример