2016-01-14 2 views
1

Im работает над сортировкой по массиву с использованием Angular JS с помощью orderBy. Но все же его не сортировали по определенному ключу.сортировать массив в angularjs

Вот код

var app = angular.module('sortModule', []) 
app.controller('MainController', function($scope,$filter){  
$scope.languages = [ 
     { name: 'English', image: '/images/english.png',key:2 }, 
     { name: 'Hindi', image: '/images/hindi.png',key:3 }, 
    { name: 'English', image: '/images/english.png',key:2}, 
    { name: 'Telugu', image: '/images/telugu.png',key:1 }];   

var newLanguages = [] 
newLanguages = angular.copy($scope.languages); 
function sortImages() { 
     $scope.languages = [] 
    $scope.keys = []   
     for(language in newLanguages) { 
      $scope.keys.push(newLanguages[language]) 
    } 
    $filter('orderBy')($scope.keys, 'key') 
    console.log(JSON.stringify($scope.keys)) 
} 
sortImages(); 

});

Fiddle

планирование Im, чтобы увидеть сортировки на основе "ключ". telugu должен наступить первым, английский следующий и хинди последним.

ответ

7

вам нужно иметь:

$scope.keys = $filter('orderBy')($scope.keys, 'key', false) 

заказ фильтром возвращает новый массив, не вносить изменения в передаваемом массиве.

обновлена ​​скрипку: http://jsfiddle.net/kjuemhua/17/

+0

Да, вы» re право. Это была глупая ошибка. Если у вас есть лучший код для сортировки, можете ли вы опубликовать его plz? – Syed

+0

Я не уверен, почему вы используете 3 массива и angular.copy. вы могли бы отсортировать свой исходный массив. – gaurav5430

+0

Можете ли вы PLZ обновить в скрипке? – Syed

1

Удалить OrderBy из HTML-разметки для отображения маркированного списка:

<div ng-app="sortModule" class="nav"> 
<div ng-controller="MainController"> 


    <button ng-click="sort()">Sort 
    </button> 
    <div></div> 
    <div >   
     <ul> 
      <li ng-repeat="lang in languages"> 
       <span>{{lang.name}}</span> 
      </li> 
     </ul> 
    </div> 
    </div> 
</div> 

Теперь с помощью кнопки сортировки сортировать список

var app = angular.module('sortModule', []) 
app.controller('MainController', function($scope,$filter){  
    $scope.languages = [ 
      { name: 'English', image: '/images/english.png',key:2 }, 
      { name: 'Hindi', image: '/images/hindi.png',key:3 }, 
     { name: 'English', image: '/images/english.png',key:2}, 
     { name: 'Telugu', image: '/images/telugu.png',key:1 }];   

    var newLanguages = [] 
    newLanguages = angular.copy($scope.languages); 
    $scope.sort = function(){ 
      $scope.languages = [] 
     $scope.keys = []   
      for(language in newLanguages) { 
       $scope.keys.push(newLanguages[language]) 
     } 
     $scope.keys = $filter('orderBy')($scope.keys, 'key', false); 
     $scope.languages = $scope.keys; 
     console.log(JSON.stringify($scope.keys)) 
    } 
}); 
+0

Привет, Листок. Я сделал это и его рабочий штраф – Syed