Angular ui-grid以编程方式设置过滤器字段并刷新。价值没有显示出来

问题描述 投票:4回答:4

我有一个使用内置过滤的一堆列的ui-grid。其中一列是“所有者”。您可以单击一个按钮,显示“我的项目”。单击该按钮时,应使用用户名填充“所有者过滤器”字段并过滤项目。我按照ui-grid文档中的说明设置过滤器如下:

$ scope.gridApi.grid.columns [3] .filters [0] =“somename”;

但是“somename”永远不会出现在列过滤器标头中,并且数据永远不会刷新。我试过调用refresh()以及notifyDataChange,但似乎没有任何工作。

谢谢。

javascript angularjs angular-ui-grid
4个回答
7
投票

这是正确的做法。顺便说一句,没有必要调用refresh()函数。

  $scope.gridApi.grid.columns[3].filters[0] = {
    term: somename
  };

2
投票

我试图解决这个问题,但遇到了问题。我用一个轻微的语法改变解决了它(改变了grids.columns[2]grid.getColumn('mycolumn')

$scope.grid1Api.grid.getColumn('speicialty').filters[0] = {
   term: whatever
};

希望对任何人都有帮助

对于我的特殊情况,这是我的所有代码:

控制器:

function skillsFunc(job) {
   console.log(job);
   $scope.grid1Api.grid.getColumn('speicialty').filters[0] = {
      term: job
   };
};

HTML:

<div class="input-field col s2 locator-margin3">
  <label for="skills1" class="locator-label">SPECIAL SKILLS</label>
  <select ng-model="vm.skills" ng-change="vm.skillsFunc(vm.skills)" id="skills1" class="browser-default locator-select ">
        <option value="1">SKILLS</option>
        <option value="Audiolog">Audiologist</option>
        <option value="Allerg">Allergist</option>
        <option value="Androlog">Andrologist</option>
   </select>
</div>

0
投票

好吧,我意识到OP已经弄明白了(尽管有一个答案。)对我而言,这有点痛苦。答案隐藏在线条之间。这对我有用:

$scope.MyGridName.grid.columns[2].filters[0] = { term: "CP" };
$scope.MyGridName.grid.refresh();

“CP”实际上来自KendoUI图表。但你可以在那里放任何你想要的东西。列[2]中的2是我的第3列。我没有像OP那样隐藏的领域。


0
投票

我找到了工作答案和创建指令:

.directive('uiGridSaveFilter', function ($compile, $timeout, $window) { // use $window to save local variable
    return {
        priority: 0,
        scope: false,
        require: '^uiGrid', 
        replace: true,
        link: function ($scope, $elm, $attrs) {
            $window.gridState = []; 
            $timeout(function () {

                $scope.gridApi.core.on.filterChanged($scope, saveState); //filter listener
                $scope.gridApi.core.on.rowsRendered($scope, restoreState); //rebuild listener

                function saveState() {
                    $window.gridState = [];
                    var grid = this.grid;

                    /// set filters to local array with config

                    angular.forEach(grid.columns, function (value, key) {
                        if (value.filters[0].term) {
                            var dummy = {};
                            dummy['k'] = value.colDef.name;
                            dummy['v'] = value.filters[0].term;
                            $window.gridState.push(dummy);
                        }
                    });
                }

                function restoreState() {

                    var grid = this.grid;
                    $timeout(function () {

                       ///loop columns and check is any filters added to field

                        angular.forEach(grid.columns, function (value, key) {
                            angular.forEach($window.gridState, function (value2, key2) {
                                if (value.field === value2.k) {
                                    value.filters[0].term = value2.v;
                                }
                            });
                        });
                    });
                }
            });
        }
    };
});
© www.soinside.com 2019 - 2024. All rights reserved.