Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阴影dom中的svg_Javascript_Angular_Webforms_Font Awesome_Web Component - Fatal编程技术网

Javascript 阴影dom中的svg

Javascript 阴影dom中的svg,javascript,angular,webforms,font-awesome,web-component,Javascript,Angular,Webforms,Font Awesome,Web Component,我试图在web组件中使用字体AWJS/svg库,但图标不会显示。这可能吗 我正在尝试在现有webforms项目中实现一个角度组件,而不需要css和脚本“出血”,还有其他建议吗?iframe不是一个选项 <html> <head> <script src="https://polygit.org/components/webcomponentsjs/webcomponents-loader.js"></script>

我试图在web组件中使用字体AWJS/svg库,但图标不会显示。这可能吗

我正在尝试在现有webforms项目中实现一个角度组件,而不需要css和脚本“出血”,还有其他建议吗?iframe不是一个选项

    <html>
    <head>
        <script src="https://polygit.org/components/webcomponentsjs/webcomponents-loader.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/js/all.min.js" defer>
        </script>
        <script>
            customElements.define('my-holder', class extends HTMLElement {
                constructor() {
                    super();

                    console.log("constructor");
                    let shadowRoot = this.attachShadow({
                        mode: 'open'
                    });

                    const t = document.querySelector('#holder');
                    const instance = t.content.cloneNode(true);

                    shadowRoot.appendChild(instance);
                }

                connectedCallback() {
                    console.log("callback");
                }
            });
        </script>
    </head>

    <body>
        <div id="outside">
            light dom
            <div class="fa-4x">
                <span class="fa-layers fa-fw" style="background:MistyRose">
                    <i class="fas fa-circle" style="color:Tomato"></i>
                    <i class="fa-inverse fas fa-times" data-fa-transform="shrink-6"></i>
                </span>
            </div>
        </div>

        <template id="holder">
            <script src="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/js/all.min.js" defer></script>
            dark shadow dom
            <div class="fa-4x">
                <span class="fa-layers fa-fw" style="background:MistyRose">
                    <i class="fas fa-circle" style="color:Tomato"></i>
                    <i class="fa-inverse fas fa-times" data-fa-transform="shrink-6"></i>
                </span>
            </div>
        </template>

        <div id="inside">
            <my-holder></my-holder>
        </div>

    </body>
    </html>

customElements.define('my-holder',类扩展HtmleElement{
构造函数(){
超级();
console.log(“构造函数”);
让shadowRoot=this.attachShadow({
模式:“打开”
});
const t=document.querySelector(“#holder”);
const instance=t.content.cloneNode(true);
appendChild(实例);
}
connectedCallback(){
console.log(“回调”);
}
});
轻dom
暗影dom

许多旧的skool库使用
文档。
访问主DOM。
所以他们不能对
shadowDOM

这意味着你不让脚本流血的目标是不可能的。
字体(脚本和样式)必须加载到主DOM中

如果您不想在shadowDOM之外对样式进行出血,则必须遵守以下规则:

  • 字体图标定义必须保留在主DOM中

  • lightDOM是shadowDOM内容的(主DOM)“原始”DOM

  • lightDOM由主DOM设置样式
    (或其shadowDOM容器,如果元素本身位于另一个shadowDOM中)

  • 开槽光域保留在光域中,仅反映到其

  • 您不想在每个lightDOM中重复图标定义
    (那么您最好不要使用自定义元素)


  • 自定义元素可以访问整个DOM
解决方案: 编写一个自定义元素

  • 创造自己的光明
  • 是开槽的(反射!未移动!
  • 从属性获取配置


自定义元素。定义('awesome-icon',类扩展HtmleElement{
构造函数(){
super().attachShadow({mode:'open'})
.append(document.getElementById(this.nodeName.content.cloneNode(true));
}
connectedCallback(){
let setProperty=
(prop,value)=>this.shadowRoot.host.style.setProperty('--'+prop,value);
setProperty('fa-background',this.getAttribute('background');
setProperty('fa-color',this.getAttribute('color');
//将图标HTML移回lightDOM,以便Fontsome可以为其设置样式
this.innerHTML=this.shadowRoot.querySelector(“#ICON”).innerHTML;
}
});
::开槽(*){
/*lightDOM SPAN具有更高的特异性,唯一的出路是使用!重要*/
背景:var(--fa背景,灰色)!重要;
颜色:var(--fa颜色,暗灰色)!重要;
}
跨度{
背景:lightblue;/*!important inside shadowDOM将否决这些设置*/
颜色:红色;
}

许多旧的skool库使用
文档。
访问主DOM。
所以他们不能对
shadowDOM

这意味着你不让脚本流血的目标是不可能的。
字体(脚本和样式)必须加载到主DOM中

如果您不想在shadowDOM之外对样式进行出血,则必须遵守以下规则:

  • 字体图标定义必须保留在主DOM中

  • lightDOM是shadowDOM内容的(主DOM)“原始”DOM

  • lightDOM由主DOM设置样式
    (或其shadowDOM容器,如果元素本身位于另一个shadowDOM中)

  • 开槽光域保留在光域中,仅反映到其

  • 您不想在每个lightDOM中重复图标定义
    (那么您最好不要使用自定义元素)


  • 自定义元素可以访问整个DOM
解决方案: 编写一个自定义元素

  • 创造自己的光明
  • 是开槽的(反射!未移动!
  • 从属性获取配置


自定义元素。定义('awesome-icon',类扩展HtmleElement{
构造函数(){
super().attachShadow({mode:'open'})
.append(document.getElementById(this.nodeName.content.cloneNode(true));
}
connectedCallback(){
let setProperty=
(prop,value)=>this.shadowRoot.host.style.setProperty('--'+prop,value);
setProperty('fa-background',this.getAttribute('background');
setProperty('fa-color',this.getAttribute('color');
//将图标HTML移回lightDOM,以便Fontsome可以为其设置样式
this.innerHTML=this.shadowRoot.querySelector(“#ICON”).innerHTML;
}
});
::开槽(*){
/*lightDOM SPAN具有更高的特异性,唯一的出路是使用!重要*/
背景:var(--fa背景,灰色)!重要;
有限公司
    <span class="fa-4x fa-layers fa-fw">
      <i class="fas fa-circle"></i>
      <i class="fa-inverse fas fa-times" data-fa-transform="shrink-6"></i>
    </span>    
    <awesome-icon background="lightcoral" color="red"></awesome-icon>
    <awesome-icon background="lightgreen" color="green"></awesome-icon>
    <awesome-icon></awesome-icon>