index.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import {VantComponent} from '../common/component';
  2. import {useChildren} from '../common/relation';
  3. VantComponent({
  4. relation: useChildren('collapse-item'),
  5. props: {
  6. value: {
  7. type: null,
  8. observer: 'updateExpanded',
  9. },
  10. accordion: {
  11. type: Boolean,
  12. observer: 'updateExpanded',
  13. },
  14. border: {
  15. type: Boolean,
  16. value: true,
  17. },
  18. },
  19. methods: {
  20. updateExpanded() {
  21. this.children.forEach((child) => {
  22. child.updateExpanded();
  23. });
  24. },
  25. switch(name, expanded) {
  26. const {accordion, value} = this.data;
  27. const changeItem = name;
  28. if (!accordion) {
  29. name = expanded
  30. ? (value || []).concat(name)
  31. : (value || []).filter((activeName) => activeName !== name);
  32. } else {
  33. name = expanded ? name : '';
  34. }
  35. if (expanded) {
  36. this.$emit('open', changeItem);
  37. } else {
  38. this.$emit('close', changeItem);
  39. }
  40. this.$emit('change', name);
  41. this.$emit('input', name);
  42. },
  43. },
  44. });