vnodes.js 820 B

123456789101112131415161718192021222324252627282930313233343536
  1. function flattenVNodes(vnodes) {
  2. var result = [];
  3. function traverse(vnodes) {
  4. vnodes.forEach(function (vnode) {
  5. result.push(vnode);
  6. if (vnode.componentInstance) {
  7. traverse(vnode.componentInstance.$children.map(function (item) {
  8. return item.$vnode;
  9. }));
  10. }
  11. if (vnode.children) {
  12. traverse(vnode.children);
  13. }
  14. });
  15. }
  16. traverse(vnodes);
  17. return result;
  18. } // sort children instances by vnodes order
  19. export function sortChildren(children, parent) {
  20. var componentOptions = parent.$vnode.componentOptions;
  21. if (!componentOptions || !componentOptions.children) {
  22. return;
  23. }
  24. var vnodes = flattenVNodes(componentOptions.children);
  25. children.sort(function (a, b) {
  26. return vnodes.indexOf(a.$vnode) - vnodes.indexOf(b.$vnode);
  27. });
  28. }