You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于给定Angular代码使用angular-data-grid同时筛选两个数据库?

实现angular-data-grid对两个数据集的同步筛选

嘿,我看你已经搭好了两个angular-data-grid的基础框架,分别绑定了monthArray和dayArray这两个数据集对吧?要实现同时筛选两个表格其实很容易,咱们可以通过共享筛选状态、同步筛选逻辑的方式来实现,下面结合你的现有代码给你具体步骤:


1. 添加共享的筛选状态变量

首先在你的Angular控制器初始化代码里,新增一个用来存储筛选关键词的共享变量,同时结合你已有的selectedStore,把它也纳入筛选逻辑:

$scope.UI = {}; 
$scope.gridActions = {}; 
$scope.storeNameArray = []; 
$scope.selectedStore = {}; 
$scope.monthArray = []; 
$scope.dayArray = [];
// 新增:共享筛选关键词
$scope.sharedFilter = '';

2. 封装通用的筛选函数

为了避免重复代码,咱们把筛选逻辑抽成一个公共函数,这样两个表格可以复用同一套规则,还能灵活指定每个表格需要筛选的字段:

// 通用筛选函数:item为当前行数据,filterKeys为需要匹配的字段数组
$scope.filterGridItem = function(item, filterKeys) {
  // 先处理店铺筛选(如果有选中店铺的话)
  if ($scope.selectedStore.id && item.storeId !== $scope.selectedStore.id) {
    return false;
  }
  // 处理文本关键词筛选
  if (!$scope.sharedFilter) return true; // 无关键词时显示所有数据
  const lowerCaseFilter = $scope.sharedFilter.toLowerCase();
  // 检查item的指定字段是否包含关键词
  return filterKeys.some(key => {
    const fieldValue = item[key];
    return fieldValue && fieldValue.toString().toLowerCase().includes(lowerCaseFilter);
  });
};

3. 给两个Grid配置同步筛选规则

修改你已有的monthGridOptions和dayGridOptions,添加filter.predicate属性,绑定到咱们上面写的通用筛选函数,分别指定每个表格需要筛选的字段:

$scope.monthGridOptions = { 
  data: $scope.monthArray, 
  urlSync: true, 
  enableSorting: true, 
  sort: { predicate: 'month', direction: 'asc' },
  // 新增筛选配置
  filter: {
    predicate: function(item) {
      // 指定月度表格需要筛选的字段,比如month、storeName等
      return $scope.filterGridItem(item, ['month', 'storeName']);
    }
  }
}; 

$scope.dayGridOptions = { 
  data: $scope.dayArray, 
  urlSync: true, 
  enableSorting: true, 
  sort: { predicate: 'day', direction: 'asc' },
  // 新增筛选配置
  filter: {
    predicate: function(item) {
      // 指定日度表格需要筛选的字段,比如day、storeName等
      return $scope.filterGridItem(item, ['day', 'storeName']);
    }
  }
};

4. 在视图层添加筛选控件

最后在你的HTML里添加筛选输入框(和店铺下拉框,如果需要的话),绑定到咱们的共享变量,这样用户操作时两个表格会同步更新:

<!-- 店铺筛选下拉框(如果需要) -->
<select ng-model="selectedStore" ng-options="store as store.name for store in storeNameArray">
  <option value="">选择店铺</option>
</select>

<!-- 文本筛选输入框 -->
<input 
  type="text" 
  ng-model="sharedFilter" 
  ng-model-options="{ debounce: 300 }" <!-- 防抖优化,避免频繁触发筛选 -->
  placeholder="输入关键词同时筛选两个表格"
/>

<!-- 两个angular-data-grid的渲染代码 -->
<angular-data-grid options="monthGridOptions"></angular-data-grid>
<angular-data-grid options="dayGridOptions"></angular-data-grid>

这样配置之后,不管是选择店铺还是输入文本关键词,两个表格都会同时应用筛选规则,实现你要的同步筛选效果啦。如果你的数据集字段和示例不同,只需要调整filterGridItem里的字段判断逻辑,或者修改filterKeys数组里的字段名就行。

内容的提问来源于stack exchange,提问作者Tree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:13:32