在 Angular 4 中的多个模块中导入组件
importing a component in multiple module in Angular 4
我有一个SharedModule
import { NgModule } from '@angular/core';
import { ControlMessagesComponent } from './control-messages.component';
@NgModule({
imports: [
],
declarations: [
ControlMessagesComponent
],
exports: [
ControlMessagesComponent,
]
})
export class SharedModule {}
然后我导入了 2 个不同的模块:
import { SharedModule } from './../shared/shared.module';
@NgModule({
imports: [
SharedModule
],
declarations: [
],
providers: [
]
})
export class OnboardModule {}
import { SharedModule } from '../shared/shared.module';
@NgModule({
imports: [
SharedModule
],
declarations: [
],
providers: [
]
})
export class AModule {}
这是ControlMessagesComponent
import { Component, Input } from '@angular/core';
import { FormGroup, FormControl } from '@angular/forms';
import { ValidationService } from './../validators/validator';
@Component({
selector: 'control-messages',
template: `<div *ngIf="errorMessage !== null">{{errorMessage}}</div>`
})
export class ControlMessagesComponent {
@Input() control: FormControl;
constructor() {}
get errorMessage() {
for (const propertyName in this.control.errors) {
if (this.control.errors.hasOwnProperty(propertyName) && this.control.touched) {
return ValidationService.getValidatorErrorMessage(propertyName, this.control.errors[propertyName]);
}
}
return null;
}
}
当我使用它时:
<control-messages [control]="form.controls.assetName"></control-messages>
我收到以下错误:
Can't bind to 'ngIf' since it isn't a known property of 'div'.
("]*ngIf="errorMessage !==
null">{{errorMessage}}"):
ng:///SharedModule/ControlMessagesComponent.html@0:5
Property binding ngIf not used by any directive on an embedded template. Make sure that the property name is spelled correctly and
all directives are listed in the "@NgModule.declarations". ("[ERROR
->]{{errorMessage}}"): ng:///SharedModule/ControlMessagesComponent.html@0:0
我别无选择,有人可以告诉我我做错了什么吗?
将 CommonModule
添加到您的 SharedModule
。 NgIf
和 NgForOf
也是 CommonModule
中的指令。您的组件实际上在 SharedModule
中,使用 NgIf
,因此您必须将其导入到您的模块中。
The module that includes all the basic Angular directives like NgIf
,
NgForOf
,
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ControlMessagesComponent } from './control-messages.component';
@NgModule({
imports: [
CommonModule
],
declarations: [
ControlMessagesComponent
],
exports: [
ControlMessagesComponent,
]
})
export class SharedModule {}
我有一个SharedModule
import { NgModule } from '@angular/core';
import { ControlMessagesComponent } from './control-messages.component';
@NgModule({
imports: [
],
declarations: [
ControlMessagesComponent
],
exports: [
ControlMessagesComponent,
]
})
export class SharedModule {}
然后我导入了 2 个不同的模块:
import { SharedModule } from './../shared/shared.module';
@NgModule({
imports: [
SharedModule
],
declarations: [
],
providers: [
]
})
export class OnboardModule {}
import { SharedModule } from '../shared/shared.module';
@NgModule({
imports: [
SharedModule
],
declarations: [
],
providers: [
]
})
export class AModule {}
这是ControlMessagesComponent
import { Component, Input } from '@angular/core';
import { FormGroup, FormControl } from '@angular/forms';
import { ValidationService } from './../validators/validator';
@Component({
selector: 'control-messages',
template: `<div *ngIf="errorMessage !== null">{{errorMessage}}</div>`
})
export class ControlMessagesComponent {
@Input() control: FormControl;
constructor() {}
get errorMessage() {
for (const propertyName in this.control.errors) {
if (this.control.errors.hasOwnProperty(propertyName) && this.control.touched) {
return ValidationService.getValidatorErrorMessage(propertyName, this.control.errors[propertyName]);
}
}
return null;
}
}
当我使用它时:
<control-messages [control]="form.controls.assetName"></control-messages>
我收到以下错误:
Can't bind to 'ngIf' since it isn't a known property of 'div'. ("]*ngIf="errorMessage !== null">{{errorMessage}}"): ng:///SharedModule/ControlMessagesComponent.html@0:5 Property binding ngIf not used by any directive on an embedded template. Make sure that the property name is spelled correctly and all directives are listed in the "@NgModule.declarations". ("[ERROR ->]{{errorMessage}}"): ng:///SharedModule/ControlMessagesComponent.html@0:0
我别无选择,有人可以告诉我我做错了什么吗?
将 CommonModule
添加到您的 SharedModule
。 NgIf
和 NgForOf
也是 CommonModule
中的指令。您的组件实际上在 SharedModule
中,使用 NgIf
,因此您必须将其导入到您的模块中。
The module that includes all the basic Angular directives like
NgIf
,NgForOf
,
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ControlMessagesComponent } from './control-messages.component';
@NgModule({
imports: [
CommonModule
],
declarations: [
ControlMessagesComponent
],
exports: [
ControlMessagesComponent,
]
})
export class SharedModule {}