【发布时间】:2019-12-19 21:55:48
【问题描述】:
在HeaderComponent 上,我正在使用authorize 指令:
<li *authorize="'SignedIn'"><button (click)="signIn()">Sign In</button></li>
但我得到了错误:
Can't bind to 'authorize' since it isn't a known property of 'li'.
HeaderComponent 被添加到 HeaderModule:
@NgModule({
declarations: [
HeaderComponent
],
imports: [
CommonModule,
PopupModule
],
exports: [
HeaderComponent
]
})
HeaderModule 和 AuthorizeDirective 被添加到 SharedModule:
@NgModule({
declarations: [
AuthorizeDirective
],
imports: [
CommonModule
],
exports: [
HeaderModule,
AuthorizeDirective
]
})
并且SharedModule 被添加到AppModule。
我错过了什么?
授权指令是:
@Directive({
selector: '[authorize]'
})
export class AuthorizeDirective implements OnInit {
private notifier: Subscription;
requirement: Requirement;
id: number;
@Input() set authorize(requirement: string) {
this.requirement = Requirement[requirement];
}
@Input() set authorizeId(id: number) {
this.id = id;
}
ngOnInit() {
}
}
【问题讨论】:
-
您的模块定义出了点问题。该指令在 SharedModule 中声明,但您在不导入它的单独模块中使用它。
-
@Rich 是的,我正在使用它的模块 HeaderModule 正在添加到 SharedModule。这还不够吗?
-
我在 SharedModule 中声明了我在其他模块中导入的指令,以便它们可以使用这些共享功能。但 HeaderModule 是 Shared 功能之一。如果我像在不属于 SharedModule 的其他模块中一样将 SharedModule 导入到 HeaderModule 中,那么我会得到一个循环引用。