press-ui
Version:
简单、易用的跨端组件库,兼容 Vue2 和 Vue3,同时支持 uni-app和普通 Vue 项目
36 lines (27 loc) • 756 B
JavaScript
function flattenVNodes(vnodes) {
const result = [];
function traverse(vnodes) {
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, parent) {
// #ifndef VUE3
const { componentOptions } = parent.$vnode;
if (!componentOptions?.children) {
return;
}
const vnodes = flattenVNodes(componentOptions.children);
children.sort((a, b) => vnodes.indexOf(a.$vnode) - vnodes.indexOf(b.$vnode));
// #endif
}