Angular 6 使用两个共享模块:组件不是已知元素:

ami*_*pta 3 lazy-loading typescript angularjs-ng-model angular angular6

我有两个共享模块“shared-candidate-login-reg.module.ts”和“shared.module.ts”,我在主页中导入了这两个共享模块。我想在我的“WidgetLogRegComponent”组件(它是我主页的子组件,也是我的“shared-candidate-login-reg.module”的一部分)中使用“shared.module.ts”中的“AlertLblComponent” ')。我也在使用延迟加载。为什么我的 Home 模块中没有“alert-lbl”组件?

我的 alert.module.ts

import { AlertLblComponent } from './../directives';
import { AlertService } from './../services/alert.service';
@NgModule({
    declarations: [
        AlertLblComponent
    ],
    imports: [
        CommonModule,
    ],
    providers: [
        AlertService,
    ],
    exports: [
        CommonModule,
        AlertLblComponent
    ]    
  })
  export class SharedModule {} 
Run Code Online (Sandbox Code Playgroud)

shared-candidate-login-reg.module.ts

import { WidgetLogRegComponent } from './../candidates/widget-log-reg/widget-log-reg.component';
@NgModule({
  imports: [
    CommonModule,
  ],
  declarations: [
    WidgetLogRegComponent
  ],
  exports: [
    WidgetLogRegComponent 
 ]
})
export class ShareCandidateLoginRegdModule { }
Run Code Online (Sandbox Code Playgroud)

home.module.ts

import {ShareCandidateLoginRegdModule} from './../shared/shared-candidate-login-reg.module';
import {SharedModule} from './../shared/shared.module';

@NgModule({
  declarations: [
    HomeComponent
      ], 
  providers: [CandidateService,JobService],
  imports: [
    CommonModule,
    SharedModule,
    ShareCandidateLoginRegdModule,
    HomeRoutingModule,
  ],
  exports: [HomeComponent],

})
export class HomeModule { }
Run Code Online (Sandbox Code Playgroud)

主页.component.html

<div class="col-md-4 banner-form">
  <app-widget-log-reg></app-widget-log-reg>
 </div>
Run Code Online (Sandbox Code Playgroud)

小部件日志reg.component.html

<alert-lbl></alert-lbl>
<div class="page-tab">
   <div id="form-login">
    ......
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

警报-lbl.component.ts

import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs';
import { AlertService } from './../services';

@Component({
    selector: 'alert-lbl',
    templateUrl: 'alert-lbl.component.html'
})
export class AlertLblComponent implements OnInit, OnDestroy {
    private subscription: Subscription;
    message: any;
    constructor(private alertService: AlertService) { }
    ngOnInit() {
        this.subscription = this.alertService.getMessage().subscribe(message => { 
            this.message = message; 
        });
    }
    ngOnDestroy() {
        this.subscription.unsubscribe();
    }
}
Run Code Online (Sandbox Code Playgroud)

警报-lbl.component.html

<div *ngIf="message" [ngClass]="{ 'alert': message, 'alert-success': message.type === 'success', 'alert-danger': message.type === 'error' }">{{message.text}}</div>
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Uncaught (in promise): Error: Template parse errors:
'alert-lbl' is not a known element:
Run Code Online (Sandbox Code Playgroud)

Bun*_*ner 5

您没有导入 .csv 文件中的SharedModule哪个导出alert-lbl组件ShareCandidateLoginRegdModule。只需按如下方式导入

@NgModule({
  imports: [
    CommonModule,
    SharedModule // <-- import shared module here
  ],
  declarations: [
    WidgetLogRegComponent
  ],
  exports: [
    WidgetLogRegComponent 
 ]
})
export class ShareCandidateLoginRegdModule { }
Run Code Online (Sandbox Code Playgroud)

  • 如果要使用另一个模块中的组件,则必须导入它。不幸的是,组件/指令/管道没有全局导入。即使你在 `home.module` 中导入了这两个模块,`ShareCandidateLoginRegdModule ` 不能在不导入的情况下使用来自 `SharedModule` 的组件。 (2认同)