Javascript / AngularJS - конвертировать строку в число в порядке. - PullRequest
0 голосов
/ 04 июля 2018

У меня простая проблема. Когда я пытаюсь заказать идентификатор, он выглядит как

1,12,13,2,20

Так что я думаю, что это предполагает строку.

Я пытался использовать номер, но без помощи.

Что я могу сделать?

THEAD

<th class="text-center">
    Ticket ID&nbsp;
    <a uib-tooltip="Sort by" ng-click="vm.sortBy('TICKET_ID');">
        <i class="glyphicon glyphicon-sort pull-right"></i>
    </a>
</th>

корпус

 <tr class="text-center" ng-repeat="ticket in filteredTickets = (vm.tickets | 
     orderBy : vm.propertyName : vm.reverse | 
     filter : vm.search | 
     limitTo : vm.itemsPerPage : vm.itemsPerPage * (vm.currentPage-1))">                  
     <td>{{ticket.TICKET_ID | number}</td>
     <!-- 'number' doesn't help... -->

Контроллер

// table ordering
vm.propertyName = 'TICKET_ID';
vm.reverse = false;

vm.sortBy = function(propertyName) {
    vm.reverse = !vm.reverse;
    vm.propertyName = propertyName;
};

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вы не должны использовать orderBy или фильтр в приложении angularJs . В угловых, обе трубы были сняты, потому что ( официальные документы ):

Angular не предоставляет каналы для фильтрации или сортировки списков. Разработчики, знакомые с AngularJS, знают это как filter и orderBy. В Angular нет эквивалентов.

Это не упущение. Angular не предлагает такие трубы, потому что они плохо работают и предотвращают агрессивную минификацию. И filter, и orderBy требуют параметры, которые ссылаются на свойства объекта. Ранее на этой странице вы узнали, что такие каналы должны быть нечистыми и что Angular вызывает нечистые каналы почти в каждом цикле обнаружения изменений.

Фильтрация и особенно сортировка - дорогостоящие операции. Пользовательский интерфейс может значительно ухудшиться даже для списков среднего размера, когда Angular вызывает эти методы канала много раз в секунду. filter и orderBy часто использовались в приложениях AngularJS, что приводило к жалобам на медленную работу самого Angular. Это обвинение справедливо в том смысле, что AngularJS подготовил эту ловушку производительности, предложив в первую очередь filter и orderBy.


Вместо этого реализуйте в вашем контроллере простой порядок и логику фильтрации и передавайте отсортированные и отфильтрованные данные в ng-repeat; теперь вы можете точно определить, когда и как следует упорядочивать, фильтровать, ...

В вашем контроллере преобразование так же просто, как

Number(anyString);

...

0 голосов
/ 04 июля 2018

Просто преобразуйте строковые значения в int и позвольте фильтру orderBy angularjs сделать всю работу за вас

$scope.getNumber = function(row){
    return parseInt(row.TICKET_ID);
};

<tr class="text-center" ng-repeat="ticket in tickets | orderBy:getNumber:true"> 

также orderBy принимает второй параметр (true / false) для упорядочивания asc / desc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...