9

我正在使用PrimeNG启用了自定义过滤和虚拟滚动的下拉组件。

我发现该组件在重新打开时不会滚动回视图中的项目列表中的最后一个选择,而是它只是滚动回列表顶部,这意味着您必须物理滚动才能找到所做的选择.

请参阅此示例stackblitz

我确实在这里遇到了一个解决方案,它谈到了调用scrollToIndexCdkVirtualScrollViewport 实例,听起来它可能对我有用。但是当我试图将它合并到我的代码中时,我的实例变量出现为未定义。

有谁知道这里的正确方法是什么?我正在使用 PrimeNG 7.1.3。

谢谢

4

2 回答 2

2

这是由于这个问题已在此 PR8.0.1的版本中 解决。所以升级primeng来解决这个问题。

我还打开了另一个问题,说明了与保留所选项目有关的进一步问题,并提出了修复 PR,当此 PR 合并时,所有保留选择的问题都将得到解决。

于 2019-07-19T04:56:39.043 回答
1

我认为如果没有 PrimeNG 修改它们的组件以在下拉组件上添加滚动方法,或者更好的是,在下拉菜单打开时决定是否应自动滚动所选项目的属性,我认为无论如何都无法解决此问题。(或者也许它甚至应该一直这样做,比如非虚拟模式)

解释

使用ViewChild(say on componentA) (即使forwardRef像你一样)永远不会起作用,因为它只能从componentA的模板(包含下拉菜单的模板)访问直接子组件,但它不能从子组件的模板(即PrimeNG 下拉组件本身)。

使用相同的东西ContentChild,这是设计使然

您在示例中得到的是一个祖父组件 ( AppComponent)、一个子组件 ( Dropdown) 和一个孙子组件 ( CdkVirtualScrollViewport)。

SO 从祖父组件访问孙子组件的大多数答案表明:

  • @ViewChild(GrandChildComponent) grandChild在子组件中添加一个
  • @ViewChild(ChildComponent) child在祖父组件中添加一个
  • 来自祖父母,this.child.grandChild用于访问孙子

但这在这里不起作用,因为子组件是您无法控制的第 3 方组件。所以这就是为什么我认为最好是建议对 PrimeNG 进行改进

于 2019-07-04T15:26:47.293 回答