Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度平滑栅格:并非所有过滤器都显示在headerrow中_Angular_Typescript_Slickgrid - Fatal编程技术网

Angular 角度平滑栅格:并非所有过滤器都显示在headerrow中

Angular 角度平滑栅格:并非所有过滤器都显示在headerrow中,angular,typescript,slickgrid,Angular,Typescript,Slickgrid,有关文件: 我找到了问题和解决方案: 我们在数据集中使用数字id(如1,2,3,…)。在代码的某个地方,网格会混淆,并将错误的列映射为id: 当我用grid.getHeaderRowColumn(col.id)询问div并用col.id填充它时,它会显示一个与col.id不同的id! 毫无意义的说,在同一时间并没有找到所有的列(所以并不是所有的过滤器都可以设置,这是我最初的问题)。 将id更改为字符串('id1','id2','id3',…)解决了问题 我不知道这是一个bug还是仅仅是一个不可能

有关文件: 我找到了问题和解决方案:

我们在数据集中使用数字id(如1,2,3,…)。在代码的某个地方,网格会混淆,并将错误的列映射为id: 当我用grid.getHeaderRowColumn(col.id)询问div并用col.id填充它时,它会显示一个与col.id不同的id! 毫无意义的说,在同一时间并没有找到所有的列(所以并不是所有的过滤器都可以设置,这是我最初的问题)。 将id更改为字符串('id1','id2','id3',…)解决了问题

我不知道这是一个bug还是仅仅是一个不可能的动态列,但是现在只使用字符串作为id就可以了。Thanx@Ghis正在为帮助编写代码

原始问题:

我有一个奇怪的问题:

当我构建slickgrid时,并非所有列的标题行中都有一个过滤器输入框(尽管它们应该有,关于我的列定义)

当我添加(或删除)列时,其他筛选器框会出现/消失,而不会更改其他列定义。因此,它似乎是随机出现的(虽然使用相同的列,但相同的过滤器出现/消失)

使用普通的slickgrid,我可以手动设置这些过滤器来纠正这个问题。但我怎么能用这个网格呢

奇怪的建议

我使用2.15.4版的网格

编辑

这是我的gridOptions和ColumnDefinitions。 (它们是动态构造的,但这是在启动网格之前由开发工具生成的)

这就是结果(多种情况:列被洗牌,过滤器随机出现,而代码相同):


我找到了问题和解决方案:

我们在数据集中使用数字id(如1,2,3,…)。在代码中的某个地方,网格会混淆,并将错误的列映射到id:当我用grid.getHeaderRowColumn(col.id)询问div并用col.id填充它时,它会显示一个不同的id,然后是col.id!毫无意义的说,在同一时间并没有找到所有的列(所以并不是所有的过滤器都可以设置,这是我最初的问题)。将id更改为字符串('id1','id2','id3',…)解决了问题


我不知道这是一个bug还是仅仅是一个不可能的动态列,但是现在只使用字符串作为id就可以了。Thanx@ghiscoding以获取帮助。

请注意
getHeaderRowColumn
的前两行是

function getHeaderRowColumn(columnIdOrIdx) {
  var idx = (typeof columnIdOrIdx === "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx));
因此,如果传递的参数是一个数字,它将被解释为columns数组(而不是id)的基于0的索引。如果参数是字符串,则将查找列数组索引,并将该参数视为id

所以你的解决方案是正确的;如果id是数字,只需在传递之前将其转换为字符串即可


注意:对于javascript对象,这通常在很多情况下都是正确的:
o[2]
将尝试查找数组的第二个元素,而
o['2']
将查找名为“2”的对象属性。上面的代码不依赖于对象,但行为是相同的。

您需要两个标志来显示过滤器,在网格选项中启用过滤:true,然后在要使用过滤器的每列上启用过滤:true。最后,如果未定义要使用的过滤器,则默认为输入文本过滤器。这都是假设,因为您没有提供任何代码示例。如果你的问题更多的是关于动态列定义,那么这就是我从不动态使用列定义的另一个原因。顺便说一句,你应该总是提供一些你尝试的代码,否则你将无法收到任何问题的答案。我添加了一些代码。输入是动态创建的,所以很难发布,但这是wat进入网格的原因。似乎您将输出结果而不是实际的列定义,当您缺少每个属性之间的所有逗号时,很难找到问题,我必须假设
fieldtype:“string”
实际上是
fieldtype:fieldtype.string
。我不得不再说一遍,我从来没有使用过动态创建的列,也从来没有使用过动态网格选项,这是在找麻烦。在我们的项目中,我们在了解用户安全组级别后会加载某些列定义,因此我们在视图中使用
ngIf
构建网格,它解决了我们的所有问题。发现问题:我们在数据集中使用数字id(如1,2,3,…)。在代码中的某个地方,网格会混淆,并将错误的列映射到id:当我用grid.getHeaderRowColumn(col.id)询问div并用col.id填充它时,它会显示一个不同的id,然后是col.id!毫无意义的说,在同一时间并没有找到所有的列(所以并不是所有的过滤器都可以设置,这是我的问题)。将id更改为字符串('id1','id2','id3',…)解决了问题!
function getHeaderRowColumn(columnIdOrIdx) {
  var idx = (typeof columnIdOrIdx === "number" ? columnIdOrIdx : getColumnIndex(columnIdOrIdx));