Mus*_*tel 0 svelte svelte-component
我正在创建一个自定义选择下拉组件,简化如下:
<script lang="ts">
let optionsOpen: boolean = false;
function onSelectClick(e) {
optionsOpen = !optionsOpen;
let p = e.target.closest('.select');
let child = p.querySelector('.options');
console.log(child); //always null
}
</script>
<div class="select" on:click={onSelectClick}>
{#if optionsOpen}
<div class="options">
My Options
</div>
{/if}
</div>
Run Code Online (Sandbox Code Playgroud)
从上面您将看到,当单击带有 .select 类的 div 时,选项容器将打开(通过 optionsOpen 变量)。
但是,在 onSelectClick 中,我需要在打开选项 div DOM 元素后访问它。我可以访问选择 div,但不能访问子选项 div,它总是返回 null。
我怀疑这可能是因为当我尝试访问它时,选项元素尚不可用,即使我在尝试访问之前将 optionsOpen 变量设置为。
有什么想法如何在选项 div 可见后访问它吗?
解决此问题的另一种方法是使用Svelte 操作。这是一个自定义函数,在添加 DOM 节点时运行,并让您可以直接访问该节点。
这比使用 更惯用querySelector
。
<script>
let optionsOpen = false;
function onSelectClick(e) {
optionsOpen = !optionsOpen;
}
function adjustPosition(node) {
// this will run when <div class="options"> is added to the DOM
node.style.top = '300px'; // or whatever you want to do
}
</script>
<div class="select" on:click={onSelectClick}>
Select
{#if optionsOpen}
<div class="options" use:adjustPosition>
My Options
</div>
{/if}
</div>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1823 次 |
最近记录: |