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;
};
我有以下结构:
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;
};