mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
34 lines
815 B
TypeScript
34 lines
815 B
TypeScript
import { VNode } from 'vue';
|
|
|
|
function flattenVNodes(vnodes: VNode[]) {
|
|
const result: VNode[] = [];
|
|
|
|
function traverse(vnodes: VNode[]) {
|
|
vnodes.forEach((vnode) => {
|
|
result.push(vnode);
|
|
|
|
if (vnode.componentInstance) {
|
|
traverse(vnode.componentInstance.$children.map((item) => item.$vnode));
|
|
}
|
|
|
|
if (vnode.children) {
|
|
traverse(vnode.children);
|
|
}
|
|
});
|
|
}
|
|
|
|
traverse(vnodes);
|
|
return result;
|
|
}
|
|
|
|
// sort children instances by vnodes order
|
|
export function sortChildren(children: Vue[], parent: Vue) {
|
|
const { componentOptions } = parent.$vnode;
|
|
if (!componentOptions || !componentOptions.children) {
|
|
return;
|
|
}
|
|
|
|
const vnodes = flattenVNodes(componentOptions.children);
|
|
children.sort((a, b) => vnodes.indexOf(a.$vnode) - vnodes.indexOf(b.$vnode));
|
|
}
|