Angular UI Grid: How to create a pre-populated dropdown menu for column filtering

前端 未结 4 1686

I am looking for some help regarding a feature of the Angular UI Grid. Specifically I am exploring filtering and while I was able to succes

相关标签:
4条回答
  • 2021-01-01 16:08

    An extension to the accepted answer is something I just discovered through trial and error. You can use regular expressions in the selectOptions:

               columnDefs: [
                {
                    name: 'starRating',
                    headerCellClass: 'blue',
                    headerTooltip: 'Star Rating',
                    maxWidth: 100, 
                    filter:
                    {
                        type: uiGridConstants.filter.SELECT,
                        selectOptions: [
                            { value: /(THREE|FOUR|FIVE)/, label: 'Positive' },  // Here I wanted the user to be able to choose one option that would filter by several of the possible values in the data set
                            { value: /(ONE|TWO)/, label: 'Negative' },  // ...and Here
                            { value: 'ONE', label: '1' },
                            { value: 'TWO', label: '2' },
                            { value: 'THREE', label: '3' },
                            { value: 'FOUR', label: '4' },
                            { value: 'FIVE', label: '5' }
                        ]
                    }
                },
    
    0 讨论(0)
  • 2021-01-01 16:10

    I had the same requirement recently.I have figured it out myself.Here is the steps i have followed.If you want to use filters in ui-grid you can use two approaches either use existing ui-grid custom_filters or created a header template and bind it into grid.There is a nice article that how can add drop downs in ui-grid.Based on that codes i have customized my code snippets.What i do is i have created custom template inside index.html.

    <script type="text/ng-template" id="uiSelect">
    
          <ui-select-wrap>
            <label> Gender</label>
            <ui-select ng-model="MODEL_COL_FIELD" theme="selectize" ng-disabled="disabled" append-to-body="true" on-select="grid.appScope.filterTableBasedonDropDownSelect($item)">
              <ui-select-match placeholder="Select...">{{$select.selected}}</ui-select-match>
              <ui-select-choices repeat="item in col.colDef.editDropdownOptionsArray | filter: $select.search">
                <span>{{ item }}</span>
              </ui-select-choices>
            </ui-select>
          </ui-select-wrap>
        </script>
    

    I have created function called filterTableBasedonDropDownSelect($item) it will handle the filtering logic.Note that when you call a function in ui-grid normal function declaration doesn't work. Because ui-grid has its own parent scope. so you should call your function like this.

    on-select="grid.appScope.filterTableBasedonDropDownSelect($item)"
    

    Then you can declare your function logic under controller.

    $scope.filterTableBasedonDropDownSelect= function(item){
         $scope.gridOptions.data  = $filter('filter')($scope.jsonData,item, undefined);};
    

    Here is my working example.

    Hope this will help for someone.

    0 讨论(0)
  • 2021-01-01 16:15

    You can put a pulldown menu in the header via the headerCellTemplate in your columnDefs

      columnDefs: [
         {field:'myField',headerCellTempalte: 'mypulldowntemplate.html"...}
      ]
    

    mypulldowntemplate.html

      <div ng-class="{ 'sortable': sortable }">
      <div class="ui-grid-vertical-bar">&nbsp;</div>
    <div class="ui-grid-cell-contents {{col.headerClass}}" col-index="renderIndex">
        {{ col.displayName CUSTOM_FILTERS }}
        <br>
        <select ng-model="getExternalScopes().value[col.field]" ng-change="$event.stopPropagation();getExternalScopes().yourFilterFunction(col.field)">
        </select>
          
      ....

    yourFilterFunction() can do whatever it is you want to have filtered. Perhaps just by setting some variables that you use in a custom filter you assign to the grid. You can find an example of setting a condition in your custom filter on the ui Grid Tutorial here http://ui-grid.info/docs/#/tutorial/103_filtering

    0 讨论(0)
  • 2021-01-01 16:25

    You can use the built in selectOptions filter feature documented here: http://ui-grid.info/docs/#/tutorial/103_filtering

    Example:

    angular.module('exampleApp', ['ui.grid'])
      .controller('exampleCtrl', ['$scope', 'uiGridConstants', function($scope, uiGridConstants) {
        var animals = [
          { id: 1, type: 'Mammal', name: 'Elephant' },
          { id: 2, type: 'Reptile', name: 'Turtle' },
          { id: 3, type: 'Mammal', name: 'Human' }
        ];
                                                              
        var animalTypes = [
          { value: 'Mammal', label: 'Mammal' },
          { value: 'Reptile', label: 'Reptile'}
        ];
      
        $scope.animalGrid = {
          enableFiltering: true,
          columnDefs: [
            {
              name: 'type', 
              field: 'type', 
              filter: { selectOptions: animalTypes, type: uiGridConstants.filter.SELECT }
            },
            { name: 'name', name: 'name'}
          ],
          data: animals
        };
          
      }]);
    <link href="http://ui-grid.info/release/ui-grid.css" rel="stylesheet" />
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <script src="http://ui-grid.info/release/ui-grid.js"></script>
    
    <div ng-app="exampleApp">
      <div ng-controller="exampleCtrl">
        <h1>UI Grid Dropdown Filter Example</h1>
        <div ui-grid="animalGrid" class="grid"></div>
      </div>
    </div>

    0 讨论(0)
提交回复
热议问题