angular - 在指令中动态添加 *ngIf

标签 angular angular-directive

如何将 *ngIf 动态添加到用属性指令装饰的元素?

为了一个简单的实验,我尝试了这个:

@Directive({
    selector: '[lhUserHasRights]'
})
export class UserHasRightsDirective implements OnInit, OnDestroy {
    constructor(private el: ElementRef) {
    }

    ngOnInit(): void {
        this.el.nativeElement.setAttribute("*ngIf", "false");
    }

    ...

,但是没有用。浏览器向我显示错误“ERROR DOMException:无法在‘Element’上执行‘setAttribute’:‘ngIf’不是有效的属性名称。

最佳答案

以下建议基于Structural Directives Angular 文档中的示例。

@Directive({
    selector: '[lhUserHasRights]'
})
export class UserHasRightsDirective implements OnInit, OnDestroy {
    private hasRights = false;
    private hasView = false;

    constructor(private templateRef: TemplateRef<any>,
                private viewContainer: ViewContainerRef) {
    }

    ngOnInit(): void {
        if (this.hasRights && !this.hasView) {
            this.viewContainer.createEmbeddedView(this.templateRef);
            this.hasView = true;
        } else if (!this.hasRights && this.hasView) {
            this.viewContainer.clear();
            this.hasView = false;
        }
    }

    ...

现在这是您可能需要连接的其他一些管道,具体取决于您必须如何使用指令。例如你想像这样使用它

<div *lhUserHasRights>...</div>

<div *lhUserHasRights="condition">...</div>

我建议阅读上面链接中的文档部分。

关于angular - 在指令中动态添加 *ngIf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45403221/

相关文章:

angular - 可观察的 forkJoin 未触发

javascript - Angular/Typescript promise

angular - 如何在 ng2-file-upload 中添加自定义 header

angular - 在Angular中显示带有img标签的SVG

javascript - 当指令被销毁时,我是否需要销毁本地 Controller 变量?

javascript - Angular $viewValue 未反射(reflect)在更改事件的文本框中

angular - ngrx/store@6.1.0 在升级到 angular 7 时需要 @angular/core@^6.0.0 的对等体

typescript - 使用 Promise 时 Angular 2 进入循环

html - Ionic 4 showWhen hideWhen

javascript - 如何在 Angular 指令中调用我自己的函数?