无法绑定到“items”,因为它不是“virtual-scroller”的已知属性

The*_*ame 3 typescript ionic-framework angular virtualscroll

我在将虚拟滚动实现到我的 ionic 4 + Angular 项目中时遇到问题。

以前,我使用过 ionic 的虚拟滚动实现(ion-virtual-scroll),它最初工作得很好,但遇到了一个可以说是很大的警告,它不支持 ionic 的网格视图,这是我的应用程序所需的东西。(Ionic 已在其存储库中的“功能请求”下承认了这一点: https: //github.com/ionic-team/ionic/issues/16632

与此同时,我求助于使用 ngx-virtual-scroller (https://github.com/rintoj/ngx-virtual-scroller),因为它提供了多列支持

但是,我在项目中使用时遇到了问题。

我已经通过 npm 安装了它(npm install ngx-virtual-scroller --save)并在我的 app.module 中导入了 VirtualScrollerMoudle

应用程序模块.ts

import { VirtualScrollerModule } from 'ngx-virtual-scroller'

imports: [
    ...
    VirtualScrollerModule
],
Run Code Online (Sandbox Code Playgroud)

我已将虚拟滚动标签包裹在组件视图中的元素周围

产品卡视图.component.html

<virtual-scroller #scroll [items]="productsArray">
  <div *ngIf="columnViewActive; else listView">
    <ion-row>
      <ion-col size="6" *ngFor="let p of scroll.viewPortItems">
        <ion-card>
          <ion-card-header>
            <a class="productTitleColumn" title="{{ p.title }}" href="{{ p.link }}">{{ p.title }}</a>
          </ion-card-header>
          <ion-card-content>
            ..... ETC .....
          </ion-card-content>
        </ion-card>
      </ion-col>
    </ion-row>
  </div>
</virtual-scroller>
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误

控制台错误

core.js:9110错误错误:未捕获(承诺中):错误:模板解析错误:无法绑定到“项目”,因为它不是“虚拟滚动器”的已知属性。1. 如果“virtual-scroller”是 Angular 组件并且具有“items”输入,则验证它是否是该模块的一部分。2. 如果“virtual-scroller”是 Web 组件,则将“CUSTOM_ELEMENTS_SCHEMA”添加到该组件的“@NgModule.schemas”以抑制此消息。3. 要允许任何属性,请将“NO_ERRORS_SCHEMA”添加到该组件的“@NgModule.schemas”。

在寻找解决方案后,我遇到了其他人,他们也面临着类似的问题,但使用的是 Ionic 3 ( https://github.com/rintoj/ngx-virtual-scroller/issues/85 ),他们的解决方案是将 VirtualScrollMoudle 导入到使用它的子模块而不是全局应用程序模块,并表明它可能与使用组件的延迟加载有关。

不幸的是,我尝试这样做并没有成功。我尝试仅将 VirtualScrollMoudle 导入到 app.module.ts,该组件的父页面模块仅使用 virtual-scoller,并且同时导入,但遇到了相同的问题。

home.module.ts

import { VirtualScrollerModule } from 'ngx-virtual-scroller'

@NgModule({
  imports: [
    CommonModule,
    FormsModule,
    IonicModule,
    RouterModule.forChild([
      {
        path: '',
        component: HomePage
      }
    ]),
    FontAwesomeModule,
    ProductSharedModule,
    HeaderFooterSharedModule,
    HideHeaderSharedModule,
    VirtualScrollerModule
  ],
  declarations: [HomePage]
})
export class HomePageModule { }
Run Code Online (Sandbox Code Playgroud)

我还确保导入语句位于底部,正如我所见,这已经成功吸引了很多人(包括过去的我自己)

有什么解决方案或者我错过了一些非常明显的东西吗?

版本:

离子 4 (5.4.4)

角度:8.1.3

The*_*ame 6

更新

非常感谢@Reactgular,我已经解决了问题!

由于我的product-card-view.component位于共享模块内,因此我需要在共享模块内导入虚拟滚动模块,而不是单独在app.module.ts或父页面模块内导入

产品共享.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { IonicModule } from '@ionic/angular';
import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
import { VirtualScrollerModule } from 'ngx-virtual-scroller';

// Product card component
import { ProductCardViewComponent } from '../../components/products/product-card-view/product-card-view.component';

@NgModule({
  declarations: [ProductCardViewComponent],
  imports: [CommonModule, IonicModule, FontAwesomeModule, VirtualScrollerModule],
  exports: [ProductCardViewComponent]
})
export class ProductSharedModule { }

Run Code Online (Sandbox Code Playgroud)

我将保留这个答案,希望它可以帮助将来面临类似问题的任何人