2017-07-05 5 views
0

J'ai une application de réaction et tout semble fonctionner correctement. Je veux ajouter une fonctionnalité supplémentaire avec le filtrage bien que je sois actuellement bloqué.ag-grid: pré-réglage d'un filtre (par défaut) pour la grille

Quelqu'un peut-il fournir des conseils sur la façon de prérégler le filtre

en utilisant l'exemple méthode de filtrage que j'ai vu in this article J'ai essayé de mettre en œuvre un exemple de base bien qu'il ne fonctionne pas

this.state = { 
    gridOptions: { 
    . 
    . 
    . 
     onGridReady: this.initialFilter 
}, 

initialFilter(){ 
    tmp = {Currency: {type: 'contains', filter: 'usd'}}; 
    this.state.gridOptions.api.setFilterModel(tmp); 
    this.state.gridOptions.api.onFilterChanged(); 

} 

ce que je pensais de l'exécution de c'est la colonne de devises serait filtré pour connaître l'état contenant le texte de filtre usd

========================== ====================== modifier: après avoir essayé

initialFilter(){ 
    let hi=this.state.gridOptions.api.getFilterInstance('Currency'); 
    hi.setType('contains'); 
    hi.setFilter('usd'); 
    hi.onFilterChanged(); 
} 

Rien ne se passe + pas d'erreur

mais quand j'ajouter le code dans une méthode existante pour changer les filtres (quand j'ajouter manuellement un filtre):

onAfterFilterChanged() { 
    let hi=this.state.gridOptions.api.getFilterInstance('Currency'); 
    hi.setType('contains'); 
    hi.setFilter('usd'); 
    hi.onFilterChanged(); 

    this.setState({ 
     rowsToDisplay: this.state.gridOptions.api.filterManager.rowModel.rowsToDisplay.length, 
     filtering: this.props.report.views.filters 
    }); 
    this.props.filterme(this.state.filtering);  
} 

puis i obtenir l'erreur ci-dessous

Full error: Uncaught RangeError: Maximum call stack size exceeded 
at RowRenderer.workOutFirstAndLastRowsToRender (dme-ui-buidle.js:13181) 
at RowRenderer.drawVirtualRows (dme-ui-buidle.js:13178) 
at RowRenderer.refreshAllVirtualRows (dme-ui-buidle.js:13138) 
at RowRenderer.refreshView (dme-ui-buidle.js:13034) 
at RowRenderer.onModelUpdated (dme-ui-buidle.js:12979) 
at RowRenderer.onPageLoaded (dme-ui-buidle.js:12931) 
at dme-ui-buidle.js:2684 
at Array.forEach (<anonymous>) 
at EventService.dispatchEvent (dme-ui-buidle.js:2683) 
at PaginationProxy.onModelUpdated (dme-ui-buidle.js:27264) 

Répondre

0

Selon la documentation ici:

https://www.ag-grid.com/javascript-grid-filtering/

et ce plunker:

https://plnkr.co/edit/0NoAA9cEZa1Zr9brMZ2I?p=info

quelque chose comme ça devrait faire l'affaire:

var yourFilterComponent = gridOptions.api.getFilterInstance('youfieldname'); 
yourFilterComponent.setType('contains'); 
yourFilterComponent.setFilter('usd'); 
yourFilterComponent.onFilterChanged(); 
+0

J'ai essayé de faire cela (seule différence est que j'ai utilisé « cette .state.gridOptions ....... "pour mon composant de filtre mais je continue à recevoir une erreur: Uncaught RangeError: Taille maximum de la pile d'appels Je ne sais pas quelle est la cause Si je mets le code dans sa propre méthode comme je l'ai fait dans le post original, rien ne se passe (et aucune erreur). Si je mets le code dans une méthode existante onAfterFilterChanged() alors je vois le filtre appliquer mais je reçois cette erreur et il m'empêche d'appliquer manuellement d'autres filtres :( – user3120554

+0

Serait-ce que je dois utiliser le code que vous avez spécifié, mais dans une certaine méthode? – user3120554

+0

mis à jour le message original avec mes résultats après avoir essayé cela – user3120554