网站搜索

angular - “无法绑定到 'ngbNavItem',因为它不是 'li' 的已知属性” VS Code?


场景:

我们有一个生产环境的 Angular 应用程序,它使用了许多库,包括:ng-select、angular-fontawesome、ng2-charts、ngx-quill、ng-bootstrap 等等……没什么特别的。

出于某种原因,ng-bootstrap 尤其(以及其他一些较小的库)在 VS Code 中出了问题:库中的每个组件/指令都显示找不到的错误:

使用 ngbNav 的示例:

<ul ngbNav #nav="ngbNav" [(activeId)]="active" class="nav-tabs">
</ul>

问题:

VS Code 显示为红色且有错误,基本上它无效:

Can't bind to 'activeId' since it isn't a known property of 'ul'

和: :

There is no directive with "exportAs" set to "ngbNav"

是的,NgbModule 已经在 app.module.ts 中导入

  imports: [
    CommonModule,
    FormsModule,
    BrowserModule,
    AppRoutingModule,
    HttpClientModule,
    RouterModule,
    BrowserAnimationsModule,
    NgbModule,
    ...
  ]

有一点可能(有些)不标准的是,我们在应用程序中大量使用了懒加载模块。

然而,在那些使用这些组件的“子”模块中,我们也在 <module-name>.module.ts 文件中导入了 NgbModule。

奇异性:

应用程序本身运行良好:本地开发没有编译错误,所有 ng-bootstrap 组件都能正常工作,Lint 和单元测试运行良好,应用程序成功构建,生产环境中没有问题。

这让我认为这可能是 VS Code eslint 或 angular language service 的问题,但我已经尝试重新安装所有可能相关的扩展,仍然没有效果。

问题:

有人知道这会导致什么原因以及如何解决吗?这不是致命问题,但让编辑器有效有助于调试和探索库的使用。

答案#1

在组件类中,尝试添加这个属性:active=1;

答案#2

我找到了导致我这个问题的原因。在项目中有一个不再使用的旧组件,并且已经从 app.module.ts 中的 declarations: [] 部分移除了。

即使它不再被编译进应用程序,VSCode 仍会报告错误。将声明添加回 app.module.ts,‘错误’就会消失。移除它,错误又会重新出现。

在我的情况下,我可以完全删除该组件,因为它并不需要。这只是在升级 Angular 版本后最近才出现的问题。