2015-07-10 19 views
8

Sto usando django 1.8 e angularjs 1.3.14 e jquery 1.11.0.La griglia ui angolare filtra per stringa quando columnDefs ha campo come numero tipo. Perché?

Questo è in 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' 
      } 

Si noti che "tipo" è un numero. Quando lo eseguo, il programma considera questo campo come una stringa e non un numero. Quindi l'ordinamento non funziona nel modo in cui ne ho bisogno.
Ho provato a omettere il "tipo" e il rilevamento automatico del tipo di dati. -non ha funzionato.

Ecco cosa del genere appare come prima e dopo l'uso:

Before adding search items

Simply adding a 6 to the search field

Come si può vedere, gli elementi sono stati filtrati quando nessuno dei dati era più piccolo di 6. Aiutateci . Grazie.

risposta

4

È possibile utilizzare la propria funzione di condizione

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

Il problema sta filtrando. Ho impostato 'tipo:' numero '' e provato numeroStr. Né lavoro. La colonna è ancora filtrata da valori stringa e non numeri. –

+0

Ho modificato la mia risposta –

+0

Grazie. Questo è ciò che ho implementato e ha funzionato. Non avevo bisogno di includere 'riga' o 'colonna'. E funziona con o senza la frase 'se'. Se non ti dispiace, cosa fa l'istruzione if? –

1

Quale versione di angolare-ui-grid stai usando. Ho appena fatto un plnkr con i dati simili con l'ordinamento e il filtraggio e ha funzionato bene. Quindi potrebbe essere un problema di versione da parte tua.

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

che sto espandendo sulla risposta @Qi Tang nel caso ci sia qualcuno come me che era alla ricerca di una risposta in cui i risultati filtrati uguale soltanto il valore del filtro (non superiore).

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); 
    } 
} 

Nota per altri implemenations così:

if(!term) return true; 

tornerà vero per qualsiasi valore falsy, assicurarsi che sia quello che vuoi. Ciò include non solo null e undefined, ma false e 0, che in un filtro numerico potrebbero non essere desiderabili (non posso filtrare dove gli elementi sono 0).