仅在Svelte子节点全部更新后才操作DOM

时间:2019-12-18 06:11:15

标签: svelte

我有一个Svelte组件,它在其子组件上执行#each。但是,在更新所有子级之后,我希望父级调整子级的位置,以使其与他们引用的内容保持一致。 (认为​​:Google文档中的注释。)在渲染孩子时,孩子不可能知道自己的位置,因为我需要处理重叠部分:如果两个子组件引用了相同的内容,则我需要将它们垂直分布,以便他们是可读的。这需要由父母来处理。是否有处理此类问题的首选方法?我以为子组件可以将其DOM节点注册到父onMount,而父组件可以放置在其afterUpdate中。想法?

这里是rough vanilla DOM/JavaScript demo,可以说明我正在尝试做的事情。

2 个答案:

答案 0 :(得分:0)

您可以使用数据绑定来代替与父节点共享DOM节点。

“内容”组件可以与父级共享offsetTop。 “评论组”组件将共享它的height

然后,父级将拥有计算每个“注释组”的偏移量所需的数据。

父级需要确定对齐方式应该是垂直居中还是垂直居中(如果先前的“注释组”的高度大于其所引用的内容,则可能需要对齐至垂直居中)

答案 1 :(得分:0)

您是否尝试过使用刻度生命周期方法https://svelte.dev/tutorial/tick