【发布时间】:2020-12-26 10:16:32
【问题描述】:
我创建了一个自定义指令并将其添加到我的 app.module 的声明中。但是当我在我的组件中使用它时,它给了我一个错误:
属性绑定 hasClaim 未被嵌入的任何指令使用 模板。确保属性名称拼写正确,并且 所有指令都列在“@NgModule.declarations”.ng
这就是我创建指令的方式:
import { Directive, TemplateRef, ViewContainerRef, Input } from '@angular/core';
import { SecurityService } from './security.service';
@Directive({
// tslint:disable-next-line: directive-selector
selector: '[hasClaim]'
})
export class HasClaimDirective {
constructor(
private templateRef: TemplateRef<any>,
private viewContainer: ViewContainerRef,
private ss: SecurityService,
) { }
@Input() set hasClaim(claimType: any) {
debugger;
if (this.ss.hasClaim(claimType)) {
this.viewContainer.createEmbeddedView(this.templateRef);
} else {
this.viewContainer.clear();
}
}
}
这就是我的实现方式:
<ul class="nav">
<ng-container *ngIf="securityObject.isAuthenticated">
<li *ngFor="let menuItem of menuItems" routerLinkActive="active" class="{{menuItem.class}}">
<a [routerLink]="[menuItem.path]" *hasClaim="'Admin'"> <=== THIS IS THE DIRECTIVE
<i class="nc-icon {{menuItem.icon}}"></i>
<p>{{menuItem.title}}</p>
</a>
</li>
</ng-container>
<ng-container *ngIf="!securityObject.isAuthenticated">
<li routerLinkActive="active" class="">
<a routerLink="/login">
<i class="nc-icon nc-key-25"></i>
<p>Login</p>
</a>
</li>
</ng-container>
<ng-container *ngIf="securityObject.isAuthenticated">
<li routerLinkActive="active" class="" (click)="logout()">
<a routerLink="/login">
<i class="nc-icon nc-lock-circle-open"></i>
<p>Logout</p>
</a>
</li>
</ng-container>
</ul>
【问题讨论】:
标签: javascript angular typescript angular2-directives