angular 中的数组排序不起作用

Sorting array in angular doesn't work

我有以下结构:

array(
  array('id' => 1, 'name' => 'aaa', 'thumbnailUrl' => 'some1'),
  array('id' => 2, 'name' => 'ccc', 'thumbnailUrl' => 'some2'),
  array('id' => 3, 'name' => 'bbb', 'thumbnailUrl' => 'some3')
)

我是这样显示的:

<div ng-controller="CreationController">
<input type="radio" name="sortBy" id="id" ng-click="reverse=false;order('id',reverse)"><label for="id">id</label>
<input type="radio" name="sortBy" id="name" ng-click="reverse=false;order('name',reverse)"><label for="name">name</label>

    <div class="creations accordion" ng-repeat="creation in creations">
        <h3>
            {if !empty("[[creation.thumbnailUrl]]")}
                <img src="[[creation.thumbnailUrl]]" class="creation-thumb-header">
            {else}
                 <img src="/image/placeholder.png" class="creation-thumb-header">
            {/if}
            #[[creation.id]] [[creation.name]]
        </h3>
        <div class="row">
            [[creation.name]]
        </div>
    </div>
</div>

我使用 smarty 以及 angular([[ 和 ]] 标签)来做到这一点。问题是数组没有被排序。单击单选按钮没有任何改变。

怎么了,怎么办?

exampleApp.controller('CreationController', ['$scope', '$filter', function($scope, $filter) {
    var orderBy = $filter('orderBy');
    $scope.creations = creations;
    $scope.order = function(predicate, reverse) {
      $scope.creations = orderBy($scope.creations, predicate, reverse);
    };
    $scope.order('id',true);
}]);

另外,有没有办法使用 select 来做到这一点?你能提供一些例子吗?

你应该直接在repeat上使用字段和反向信息:

我做了一个jsbin来展示这个:jsbin angular orderBy

在您的代码处:

<div class="creations accordion" ng-repeat="creation in creations | orderBy : field : reverse">

此代码还处理反向字段,在第二次单击时反转:

<button ng-click="order('id')">Order by id</button>
<button ng-click="order('name')">Order by name</button>

具有功能:

$scope.order = function(field) {
    $scope.reverse = ($scope.field === field) ? ! $scope.reverse : false;
    $scope.field = field;
};