svelte - 以编程方式访问一个苗条生成的 CSS 类名?
问题描述
我正在使用一个外部库 (@shopify/draggable),并想告诉 Draggable 当前组件中可拖动 CSS 类的名称是什么。
onMount(() => {
const droppable = new Droppable(containers, {
draggable: ".draggable",
dropzone: ".dropzone",
});
});
在其他地方,我定义了一种.draggable
风格:
<style>
.draggable { ... }
</style>
我知道我可以使用:global(.draggable)
CSS 选择器告诉 Svelte CSS 类名称是全局的,但是有没有办法反过来,并询问 Svelte 它将把本地draggable
CSS 类重命名为曾经是全局的什么?例如svelte-a57ab
?
解决方案
Svelte 不会重命名可拖动类——它仍然会出现在您的标记中。它只会添加一个额外的svelte-xxxxx
类来限定样式,因此您可以继续使用.draggable
选择器。
但是,如果您确实需要访问 Svelte CSS 类,您可以自己实现它。没有内置的 Svelte API 来执行此操作,但您可以通过检查元素的类列表来检索它。您需要首先使用获取对可拖动 DOM 节点的引用,然后在函数中bind:this
从其检索 CSS 类。这是从标题中检索 CSS 类的示例。classList
onMount
<script>
import { onMount } from 'svelte';
let heading;
let svelteClass = '';
onMount(() => {
svelteClass = Array.from(heading.classList).filter(c => c.includes('svelte-'))[0];
})
</script>
<style>
h1 {
color: red;
}
</style>
<h1 bind:this={heading}>Hello world!</h1>
<div>
{svelteClass}
</div>
svelte-xxxxx
请注意,如果您已将样式应用于节点,则只会有一个类。
推荐阅读
- powershell - 对文件名中具有适当文件夹名的混合文件进行排序
- c# - 具有多个项目和抽象工厂的控制台应用程序中的简单注入器
- amazon-web-services - 建立 Alexa 库存管理技能
- ms-access - 移除 MS Access 中的所有过滤器但保持视野
- xamarin.forms - 在 Xamarin 表单中显示网页正文
- cordova - Apache Cordova Media Plugin 显示错误代码 0
- python-3.x - XGBoost 错误:/workspace/src/metric/elementwise_metric.cc:28:检查失败:preds.size() == info.labelsSize() (
- ios - 谷歌标签管理器对 iOS 应用程序有什么用?
- python - 在 Pandas 数据框中重建列名
- javascript - 通过数组转换在数组中按值查找键