【问题标题】:Can't bind property since it is unknown property of button无法绑定属性,因为它是按钮的未知属性
【发布时间】:2021-07-27 13:53:44
【问题描述】:

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

如果我不在子模块中导入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,
      ],
    };
  }

这是我尝试使用来自CoreModule的指令的html部分

        <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>

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

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

【问题讨论】:

    标签: angular angular-module


    【解决方案1】:

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

    这些内容应该放在SharedModule 中。

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

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

    我的建议是认真阅读angular.io 上提供的优秀文档/指南

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

    【讨论】:

    • 除了你的回答,模型也可以在共享模块中定义!
    • @RebaiAhmed 你在谈论数据模型吗?我猜你可以将它们放在同一个物理目录中,但你不能将它们添加到@NgModule 声明中
    • 是的,我知道,我的意思是您的共享模块应该包含管道、指令、组件和数据模型!
    猜你喜欢
    • 2018-11-25
    • 2021-12-02
    • 2019-11-04
    • 2017-02-03
    • 2019-03-11
    • 1970-01-01
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多