gpt4 book ai didi

javascript - 有条件呈现的 Web 组件和样式表链接

转载 作者:太空宇宙 更新时间:2023-11-04 05:42:32 27 4
gpt4 key购买 nike

所以我现在正在研究微前端架构 POC,使用 Web 组件来包装来自任何其他框架的代码。目标是让 UI 的各个部分可以单独部署到不同的主机,并简单地拉入“父”应用程序(即用户导航到的应用程序)。

我的大部分架构都可以正常工作,但现在我正在尝试将 Shadow DOM 集成到我的工作中。我目前的设计是通过全局静态链接/脚本标签来加载 JS 和 CSS,如下所示。如果没有 Shadow DOM,这将完美运行。

<html>
<head>
<link rel="stylesheet" href="http://micro-fe.com/file.css" />
</head>
<body>
<web-component></web-component>
<script src="http://micro-fe.com/file.js"></script>
</body>
</html>

但是,一旦我使用 Shadow DOM 将内容装载到我的 Web 组件中,它就会崩溃。我在页眉中加载的样式表不再能够触及 Web 组件中的内容。这是我使用 Shadow DOM 的最终目标,但这意味着我需要一种不同的方式来加载我的 CSS。目标是像现在一样从外部样式表加载它,而不是将它内联到标签中。像这样:

// Code is inside Web Component. "this" is HTMLElement
const shadowRoot = this.attachShadow({ mode: 'open' });
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'http://micro-fe.com/file.css';
shadowRoot.appendChild(link);

我还没有测试过,但我读到标签应该在 Shadow DOM 中工作。从理论上讲,这将使我在 Web 组件中获得我的作用域样式。

我的最后一个挑战,也是我发布这个问题的原因,与条件渲染有关。我不会总是在页面上。围绕它的其他逻辑将决定何时呈现该内容。所以我担心的是我不希望每次渲染组件时都必须重新加载 CSS 文件。

我正在考虑将浏览器缓存作为一种可能的解决方案,但总的来说,我想知道是否可以提供任何提示。我知道这有点复杂且不符合标准,但我的最终目标是解决所有这些问题并发布一个开箱即用的库,让其他人更轻松。

最佳答案

I haven't tested that yet, but I've read that tags are supposed to work from within the Shadow DOM. This, in theory, will get me my scoped styles in the Web Component.

是的,您可以使用 <link>在 Shadow DOM 中。

So my concern is that I don't want the CSS file to have to be re-loaded each time the component gets rendered. I'm considering browser caching as a possible solution, but in general I'm wondering if there are any tips that can be provided.

是的,由于浏览器缓存,CSS 文件只会在第一次需要时下载。

关于javascript - 有条件呈现的 Web 组件和样式表链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59052854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com