web-dev-qa-db-ja.com

「div」の既知のプロパティではないため、「ngbCollapse」を取得します。コンポーネントをサブモジュールに移動した後のエラー

エラー

compiler.js:215キャッチされないエラー:テンプレート解析エラー: 'ngbCollapse'は 'div'の既知のプロパティではないため、バインドできません。 ( "] [ngbCollapse] =" isHidden ">

ルートapp.moduleをよりクリーンに保つために、SharedModuleに移動するNavbarComponentとFooterComponentがあります。

app.module

import { AdminComponent } from './admin/admin.component';
// import { NavbarComponent } from './navbar/navbar.component';
// import { FooterComponent } from './footer/footer.component';

// Modules
import { DashboardModule } from './dashboard/dashboard.module';
import { HomeModule } from './home/home.module';

@NgModule({
  declarations: [
    AppComponent,
    LoginComponent,
    RegisterComponent,
    PasswordResetComponent,
    ResetPasswordComponent,
    AdminComponent,
    // NavbarComponent,
    // FooterComponent,

share.module

ただし、これらのコンポーネントをここに移動し、それらのパスを正しく更新すると、./-> ../が壊れます。

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

import { NavbarComponent } from '../navbar/navbar.component';
import { FooterComponent } from '../footer/footer.component';
import { TermsComponent } from './terms.component';
import { PageNotFoundComponent } from './not-found.component';
import { PrivacyPolicyComponent } from './privacy-policy.component';

@NgModule({
  imports: [
    CommonModule
  ],
  declarations: [
    NavbarComponent,
    FooterComponent,
    TermsComponent,
    PageNotFoundComponent,
    PrivacyPolicyComponent
  ]
})
export class SharedModule { }

navbar.component.ts

import { Component, OnInit } from '@angular/core';
import { AuthService } from '../auth.service';
import { environment } from '../../environments/environment';

@Component({
  selector: 'app-navbar',
  templateUrl: './navbar.component.html',
  styleUrls: ['./navbar.component.scss']
})
export class NavbarComponent implements OnInit {
  isHidden = true;
  oauthUrl = this.authService.generateOauthUrl();

  constructor(public authService: AuthService) { }

  ngOnInit() {
  }

  logout() {
    sessionStorage.clear();
  }
}

次に、navbar.component.html[ngbCollapse]が含まれる数行

<div *ngIf="!authService.isLoggedIn()" class="collapse navbar-collapse" id="navbarSupportedContent" [ngbCollapse]="isHidden">

これは相対パスと関係があると思いますか?

8
Leon Gaban

Angularテンプレートでng-bootstrapコンポーネントとディレクティブを使用するには、NgbModuleをインポートする必要があります。場合によっては、SharedModuleにインポートする必要があります。また、アプリケーションの他の部分で共有コンポーネントを使用するには、コンポーネントを使用するときに、それらをSharedModuleからエクスポートし、モジュールのSharedModuleをインポートする必要があります。

shared.module.ts

...
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';

@NgModule({
  imports: [
    CommonModule,
    NgbModule
  ],
  declarations: [
    NavbarComponent,
    FooterComponent,
    TermsComponent,
    PageNotFoundComponent,
    PrivacyPolicyComponent
  ],
  exports: [
    NavbarComponent,
    FooterComponent,
    TermsComponent,
    PageNotFoundComponent,
    PrivacyPolicyComponent
  ]
})
export class SharedModule { }

app.module.ts

import { SharedModule } from './shared/shared.module';
...

@NgModule({
  imports: [
    SharedModule,
    ...
  ],
  ...
})

注:SharedModule以外のテンプレートでng-bootstrapコンポーネントとディレクティブを使用する場合は、NgbModuleexportsSharedModuleを追加する必要があります。

9
ConnorsFan