2015-07-10 12 views
8

Używam django 1.8 i angularjs 1.3.14 oraz jquery 1.11.0.Angular ui grid filtruje według ciągu, gdy pole columnDef ma pole jako numer typu. Czemu?

Jest to w Controller/gridOptions/columnDefs.

{ field: 'credit_amt',     
    displayName: 'Credit Amount',   
    type: 'number', 
    width: '8%', 
    enableFocusedCellEdit: true, 
    visible:true, 
    //This 'filters' is the sort box to do the search. 
    filters: [{ 
      condition: uiGridConstants.filter.GREATER_THAN, 
      placeholder: 'greater than' 
      } 

Należy zauważyć, że "typ" jest liczbą. Po uruchomieniu programu program traktuje to pole jako ciąg, a nie liczbę. Tak więc sortowanie nie działa tak, jak tego potrzebuję.
Próbowałem pominąć typ i automatycznie wykrywając typ danych. - nie działało.

Oto co rodzaj wygląda przed i po użyciu:

Before adding search items

Simply adding a 6 to the search field

Jak widać, elementy zostały odfiltrowane gdy żadna z danych była mniejsza niż 6. Proszę o pomoc . Dziękuję Ci.

Odpowiedz

4

można wykorzystywać własną funkcję stan

condition: function(term, value, row, column){ 
    if(!term) return true; 
    return parseFloat(value) > parseFloat(term); 
} 
+0

Problem jest filtrowany. Ustawiłem "type:" number "" i wypróbowałem numberStr. Ani praca. Kolumna jest nadal filtrowana według wartości łańcuchów, a nie liczb. –

+0

Edytuję moją odpowiedź –

+0

Dziękuję. Właśnie to zaimplementowałem i zadziałało. Nie musiałem uwzględniać "wiersza" ani "kolumny". I działa z lub bez instrukcji "jeśli". Jeśli nie masz nic przeciwko temu, co robi instrukcja if? –

1

jakiej wersji kątowej-UI-siatki używasz. Właśnie zrobiłem pnkr z podobnymi danymi z sortowaniem i filtrowaniem i wszystko działało dobrze. Może to być problem z wersją na twoim końcu.

var app = angular.module('app', ['ngAnimate', 'ngTouch', 'ui.grid']); 

app.controller('MainCtrl', ['$scope', '$http', 'uiGridConstants', function ($scope, $http, uiGridConstants) { 
    $scope.gridOptions1 = { 
    enableSorting: true, 
    enableFiltering:true, 
    columnDefs: [ 
     { field: 'credit_amount',     
    displayName: 'Credit Amount',   
    type: 'number', 
    enableFocusedCellEdit: true, 
    visible:true, 
    //This 'filters' is the sort box to do the search. 
    filters: [{ 
      condition: uiGridConstants.filter.GREATER_THAN, 
      placeholder: 'greater than' 
      } 
    ] 

     }] 
    }; 

$scope.gridOptions1.data = [{ 
    credit_amount:1000.02 
},{ 
    credit_amount:1001.0 
},{ 
    credit_amount:100.0 
},{ 
    credit_amount:500.0 
}] 
}]); 

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

0

mam rozszerzenie na odpowiedź @Qi Tang w przypadku, gdy istnieje ktoś taki jak ja, który szukał odpowiedzi, gdzie tylko przefiltrowane wyniki równa wartości filtra (nie więcej).

condition: function (term, value, row, column) { 
    if ('undefined' === typeof (term) || null === term) 
     return true; 
    try { 
     return parseFloat(value) === parseFloat(term); 
    } catch (ex) { 
     console.warn(ex); 
    } 
} 

Uwaga dla innych ZASTOSOWANIA także:

if(!term) return true; 

zwróci true dla dowolnym wartości falsy, upewnij się, że to, co chcesz. Obejmuje to nie tylko wartość null i undefined, ale także false i 0, która w filtrze numerycznym może nie być pożądana (nie mogłem filtrować, gdzie elementy są równe 0).

Powiązane problemy