如何在 vue.js 中控制兄弟组件的渲染顺序 [英] How to control order of rendering in vue.js for sibling component

查看:197
本文介绍了如何在 vue.js 中控制兄弟组件的渲染顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下类型的代码:

<compA/><compB/>

如何确保第一个 compA 仅在 compB 呈现后才呈现.

为什么我想要的是我对 compA 的几个元素有一些依赖性,而 compB 的样式取决于这些元素的存在.

详细原因:

我有一些复杂的 UI 设计,当你滚动时,其中一个框会固定.所以当你滚动时它不会超过屏幕,一旦你开始滚动它就会被固定并开始接触标题.所以我使用 jquery-visible 来查找 div 是否与特定的 id 在屏幕上可见,如果不可见,我会更改样式并修复该框.以下代码应该给出我在做什么的想法:

方法:{滚动(){if ($('#divId').visible(false, false, 'vertical')) {//这是来自 compA 的 div,所以我想确保它首先被渲染并且它是可见的this.isFixed = false} 别的 {this.isFixed = 真}}},挂载(){window.addEventListener('scroll', this.onScroll() }},销毁(){window.removeEventListener('scroll', this.onScroll)}

我不想将它们放在同一个组件中,原因之一是这些组件的性质没有意义,另外我在很多地方使用 compA,而 compB 仅特定于一页.此外,这些布局不允许我按照评论中的建议将 compB 设为 compA 的子项.

欢迎提出任何建议.

解决方案

经过编辑后,我意识到依赖项不是数据驱动的,而是事件驱动的 (onscroll).我已经尝试过 something 并且看起来很有效(代码中的 setTimeout 用于演示).

我的实现与 Jonatas 的略有不同.

RenderSwitch: {{ renderSwitch }}//用于演示<模板 v-if='renderSwitch'><comp-a></comp-a></模板><comp-b @rendered='renderSwitchSet'></comp-b>

  1. component-B 被渲染时,它会发出一个事件,它只是在 component-A 的父级中设置一个数据属性组件-B.

  2. 周围的