我有一个使用内置过滤的一堆列的ui-grid。其中一列是“所有者”。您可以单击一个按钮,显示“我的项目”。单击该按钮时,应使用用户名填充“所有者过滤器”字段并过滤项目。我按照ui-grid文档中的规定设置过滤器如下:
$ scope.gridApi.grid.columns [3] .filters [0] =“somename”;
但是“somename”永远不会出现在列过滤器标头中,并且数据永远不会刷新。我试过调用refresh()以及notifyDataChange,但似乎没有任何工作。
感谢。
答案 0 :(得分:8)
这是正确的做法。顺便说一句,没有必要调用refresh()函数。
$scope.gridApi.grid.columns[3].filters[0] = {
term: somename
};
答案 1 :(得分:3)
我试图解决这个问题,但遇到了问题。我通过轻微的语法更改(将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>
答案 2 :(得分:0)
好吧,我意识到OP已经弄明白了(尽管有一个答案。)对我而言,这有点痛苦。答案隐藏在线条之间。这对我有用:
$scope.MyGridName.grid.columns[2].filters[0] = { term: "CP" };
$scope.MyGridName.grid.refresh();
“CP”实际上来自KendoUI图表。但你可以在那里放任何你想要的东西。列[2]中的2是我的第3列。我没有像OP这样的隐藏字段。
答案 3 :(得分: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;
}
});
});
});
}
});
}
};
});