2016-08-09 3 views
0

Я пытаюсь отфильтровать результаты по его позиции.orderBy: notarray Ожидаемый массив, но полученный: Object

Но как только заказ будет нарушен, так как результат не является массивом. Как я могу это изменить? Я застрял в этом.

Я делаю это так:

<div ng-repeat="cat in content | orderBy : 'pos'" class="animated zoomIn"> 

и контроллер:

firebase.database().ref("v3/standalonelist/" + catId.toLowerCase()).on('value', function(snapshot) { 

    $timeout(function() { 
     $scope.content = snapshot.val(); 
     console.log($scope.content); 

    }) 

    }); 

$ scope.content возвращает этот объект:

{ 
    "Bar One" : { 
    "bgurl" : "https://domain.com/aa/bars/list/bar.jpg", 
    "name" : "Bar One", 
    "subtitle" : "Cheers", 
    "pos", 2 

}, 
"Bar Two" : { 
    "bgurl" : "https://domain.com/aa/bars/list/bar.jpg", 
    "name" : "Bar Two", 
    "subtitle" : "Cheers", 
    "pos", 1 
} 

} 

И я получаю эту ошибку:

[orderBy:notarray] Expected array but received: [THE OBJECT ABOVE]

+0

Ошибка верно, это объект, который оберните другие объекты. Ваш контент должен быть таким: $ scope.content = [ { "bgurl": "https://domain.com/aa/bars/list/bar.jpg", "name": "Bar One", "субтитры": "Ура", "поз", 2 }, { "bgurl": "https://domain.com/aa/bars/list/bar.jpg", "название" : «Bar Two», «подзаголовок»: «Cheers», «pos», 1 } ] – oguzhan00

ответ

0

Вы моделируете объект не массивом, поэтому вы должны использовать (key, value) in experssion synatx.

+0

Спасибо. Не могли бы вы привести пример? – olivier

+0

Для заказа свойств внутри объекта вы не можете использовать фильтр 'orderBy', обработанный угловым, потому что он заказывает коллекцию. Чтобы решить вашу проблему, вы должны либо изменить структуру данных, чтобы обеспечить сбор, либо создать свой собственный фильтр для свойств заказа внутри объекта. –

1

1)Настроенные фильтр (AngularJS)для OrderBy свойство объекта ..

Пример JSON:

{ 
    "123": {"name": "Test B", "position": "2"}, 
    "456": {"name": "Test A", "position": "1"} 
} 

Попробуйте эту ссылку ...

orderBy filter for Object

2) Еще один способ получения фильтра OrderBy для свойств объекта.

  • Добавить массив ваших данных объектов:

$scope.dataArray = Object.keys($scope.data) .map(function(key) { return $scope.data[key]; });

Ввиду:

<div ng-repeat="item in dataArray | orderBy:'order.allListPosition'"> 

http://plnkr.co/edit/BXgYPTElSM3sjvLg30CL?p=preview

Смежные вопросы