无法绑定 属性,因为它是未知的 属性 按钮

Can't bind property since it is unknown property of button

我有一个问题,我有一个名为 CoreModule 的模块,它被导入到 AppModule 中,我试图在某些 child 模块中使用这个模块,但是如果我在 child 模块中导入模块,当我转到该模块中的某些组件时,它会出现此错误 CoreModule has already been loaded. Import Core modules in the AppModule only.

如果我不在 child 模块中导入 CoreModule,则会出现此错误:Can't bind to 'ngxHasAnyRole' since it isn't a known property of 'button'

在我的 AppModule 中导入看起来像这样

 imports: [
    BrowserModule,
    BrowserAnimationsModule,
    HttpClientModule,
    AppRoutingModule,
    NbSidebarModule.forRoot(),
    NbMenuModule.forRoot(),
    NbDatepickerModule.forRoot(),
    NbDialogModule.forRoot(),
    NbWindowModule.forRoot(),
    NbToastrModule.forRoot(),
    CoreModule.forRoot(),
    ThemeModule.forRoot(),
    LoggerModule.forRoot({
      level: NgxLoggerLevel.INFO,
      enableSourceMaps: true
    }),
  ],

我的CoreModule是这样的


...

@NgModule({
  imports: [
    CommonModule,
  ],
  exports: [
    NbAuthModule,
    HasRoleDirective,
    HasAnyRoleDirective,
  ],
  declarations: [HasAnyRoleDirective, HasRoleDirective],
})
export class CoreModule {
  constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
    throwIfAlreadyLoaded(parentModule, 'CoreModule');
  }

  static forRoot(): ModuleWithProviders<CoreModule> {
    return {
      ngModule: CoreModule,
      providers: [
        ...NB_CORE_PROVIDERS,
      ],
    };
  }

这是 html 的一部分,我尝试使用 CoreModule

中的指令
        <button nbButton
                (click)="new()"
                [ngxHasAnyRole]="['ROLE_TEST', 'ROLE_ADMIN']"
                class="table-button"
                status="primary"
                size="small">
          NEW
          <nb-icon icon="plus-outline"></nb-icon>
        </button>

我不想在 child 模块中导入,因为这是在 Parent 模块中导入的。我该如何解决这个问题?

附加信息 当我在 child 中导入 CoreModule 时执行 ng serve,然后在 ng serve 打开时将其删除。它有效,但如果我关闭并重新开始。启动不了。

A CoreModule 应用于只应导入一次的内容。这些通常是从应用程序范围内的服务导入的。绝对不应该放在 CoreModule 中的是组件、指令和管道。

这些是应该放在 SharedModule 中的东西。

angular 声明了几个 NgModule 类别,您可以将其用作指南:

  • Domain:领域 NgModule 是围绕功能、业务领域或用户体验组织的。
  • Routed: NgModule 的顶部组件充当路由器导航路线的目的地。
  • Routing: 一个路由 NgModule 为另一个 NgModule 提供路由配置。
  • Service: NgModule 服务提供数据访问和消息传递等实用服务。
  • Widget:小部件 NgModule 使组件、指令或管道可用于其他 NgModule。
  • Shared:共享的 NgModule 使一组组件、指令和管道可供其他 NgModule 使用。

我的建议是真正阅读 angular.io

上提供的优秀 docs/guides

那么你必须做什么?从 CoreModule 中删除 HasAnyRoleDirectiveHasRoleDirective 的导出和声明,并将它们放在 SharedModule 中或创建一个小模块 RoleModule 并仅在必要时导入它.由你决定