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 版本后最近才出现的问题。
