css - Angular 2 : Add elements to dom programmatically with viewencaptulation

标签 css angular

我正在处理上下文菜单,我需要在呈现之前获取菜单和每个子菜单的大小。我过去这样做的方法是将元素结构附加到 dom,计算 bbox,行高等。然后将其删除,因此用户永远不会看到它。

从这个操作中,我得到了检查菜单是否超出屏幕等所需的一切。然后可能会对其进行更改。

在 Angular 2 中,如果 ViewEncaptulation 设置为 None,我可以执行此操作。但是如果我使用它,我当前的build设置会出错,所以我坚持使用默认值。

有谁知道如何以编程方式制作元素并使其从 ViewEncaptulation 内部获取相同的类?

最佳答案

经过一番思考,我这样解决了。

private elementRef: ElementRef

getEncapsulationId(): string {
    if (!this.elementRef) {
        return '';
    }

    var attr = this.elementRef.nativeElement.attributes;
    for(let i = 0; i < attr.length; i++){            
        let s = attr[i].name;
        if(s.includes('_nghost')){
            return '_ngcontent' + s.substring(7);
        }
    }

    return '';
}

在创建元素时,我将封装 ID 添加为属性。

var element = document.createElement('div');
element.setAttribute(this.getEncapsulationId, '');
element.classList.add('some-class');

如果有人对此问题有更好的解决方案,请告诉我。

关于css - Angular 2 : Add elements to dom programmatically with viewencaptulation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43089294/

相关文章:

html - 有什么办法可以通过网页上的字符来改变文本 "halfway"的颜色吗?

Angular BehaviourSubject 在服务和组件中的使用,可能的竞争条件

javascript - 缩放图片时获取正确的鼠标坐标

javascript - 指定 Ionic ionic 装载容器

javascript - 在数组对象中过滤数组后的返回值

Angular 2 或 4 : How to add multiple instances of a child component

javascript - 我怎样才能让按钮检查其他按钮是否被点击

html - 为什么我的背景颜色没有显示在窗口顶部?

javascript - owl carousel 2 在部分可见时开始自动播放

javascript - 当前列表可折叠且父元素可选