代码之家  ›  专栏  ›  技术社区  ›  Fallenreaper

在运行时定义BlockUi角度注释?

  •  0
  • Fallenreaper  · 技术社区  · 7 年前

    我有一个可重复的组件,其中每个组件都需要自己独特的拦截器。我说“好吧,这很有道理”

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

    为了创建这个,我想基于每个组件创建一个GUID,名为: widgetGuid .我在init上看到了这一点,在查看block属性时:

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

    我可以设置一个name属性。所以在init中,我做到了:

    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"
    

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

    这个问题以前必须解决过,但我不确定我可能做错了什么。

    0 回复  |  直到 7 年前
        1
  •  2
  •   Fallenreaper    7 年前

    在深入研究代码库之后,NgBlockUi有一种方法可以做到这一点。

    首先,我们不需要decorator,但需要用于赋值的变量。

    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,并具有自己对块的唯一引用。