在运行时定义 BlockUi Angular 注释?

define BlockUi Angular annotations at runtime?

我有一个可重复的组件,其中每个组件都需要自己独特的拦截器。我说"Ok, that makes sense"

我实现了一个 blockUI,它将使用定义的字符串激活所有组件。为了处理模块化,我试图创建一个在 运行 上动态的注释,利用 guid。问题是模板和注释需要引用相同的东西。

为了尝试创建它,我打算在每个组件的基础上创建一个 GUID,称为:widgetGuid。我在 init 上看到了,在查看块 属性:

@BlockUI(`widget-content`) block: NgBlockUI;

我可以设置一个名称 属性。所以在初始化中,我做了:

this.block.name = `${this.block.name}-${this.widgetGuid}`;

然后在标记中我将它从静态字符串设置为:

// I also attempted some hardcoding as well: 
//    *blockUI="'widget-content'+widgetGuid" and that also failed.
*blockUI="block.name"

但似乎当我开始触摸块名称时,微调器就不再起作用了。

这之前必须解决,但我不确定我可能做错了什么。

在深入研究代码库后,NgBlockUi 有办法做到这一点。

首先,我们不需要装饰器,但需要变量进行赋值。

import { NgBlockUI } from 'node_modules/ng-block-ui';
import { BlockUIInstanceService } from 'ng-block-ui/lib/services/block-ui-instance.service';
import { Guid } from "src/utilities/guid.ts";  //A TS Guid Generator.

export class TestComponent implements OnInit {
    block: NgBlockUI;

    constructor( private _blockService: BlockUIInstanceService) {}

    ngOnInit() {
        let blockName = `widget-content-${Guid.newGuid()}`;
        this.block = this.blockService.decorate(blockName);
    }
}

标记:

<div *BlockUI="block.name">Hello World</div>

因此,组件的每个实例都将获得一个唯一定义的 guid,并将有自己唯一的块引用。