angular 写一个结构型指令

写一个名叫 kylinAcl 的结构型指令,用作控制页面上的按钮根据后端返回的权限是否删除和添加。

<button *kylinAcl="'button'">应该显示</button>

创建指令很像创建组件。

  1. 这里是列表文本导入 Directive 装饰器(而不再是 Component)。

  2. 导入符号 Input、TemplateRef 和 ViewContainerRef,你在任何结构型指令中都会需要它们。

  3. 给指令类添加装饰器。

  4. 设置 CSS 属性选择器 ,以便在模板中标识出这个指令该应用于哪个元素。

这里是起点:

import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';
@Directive({
  selector: '[kylinAcl]'
})

声明变量

  buttonList: Array<string>;
  private hasView = false;
  private allow = false;

实现代码:

  @Input() set kylinAcl(buttonName: string) {
    this.buttonList.forEach((allowName) => { // 从拿到的按钮权限里面查找是否有此按钮名称
      if (allowName === buttonName) {
        this.allow = true;
      }
    });

    if (this.allow) { // 应该显示
      this.viewContainerRef.createEmbeddedView(this.templateRef);
      this.hasView = true;
    } else if (!this.allow) { // 应该从DOM移除  这里直接使用else没问题,使用else if 完全是作者喜好问题
      this.viewContainerRef.clear();
      this.hasView = false;
    }

  }

转载于:https://my.oschina.net/u/3615170/blog/1825671

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值