我想创建一个指令,决定是否应该或不应该在页面上的主机元素apppear.理想情况下,我希望它从DOM中删除元素,而不是用css隐藏/显示它.用例是:
它将使用UserService来获取currentUser角色,如果没有管理员,那么li
将被删除.
我想ng-if
通过将表达式传递给主要组件中的evaulate,我可以实现相同的效果(如果它仍然在角度2中可用).但是使用该指令它更具语义和优雅.
可能吗?
import {Directive} from 'angular2/angular2'; @Directive({ selector: 'access' }) export class Access { //what goes here }
我可以在角度1(内部指令的compile
函数)中轻松完成,但我怎么能在Angular 2中做到这一点?
此实现类似于ngIf指令.结构指令的Angular 指南(你计划创建它)给出了一个myUnless
反正的例子ngIf
.
您对访问的myUnless
实现看起来与实现类似.
@Directive({ selector: '[access]' }) export class AccessDirective { constructor( private _templateRef: TemplateRef, private _viewContainer: ViewContainerRef ) { } @Input() set myUnless(condition: boolean) { if (condition) { this._viewContainer.createEmbeddedView(this._templateRef); } else { this._viewContainer.clear(); } } }
并使用它像: