u-swipe-action.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <template>
  2. <view class="u-swipe-action">
  3. <slot></slot>
  4. </view>
  5. </template>
  6. <script>
  7. import { props } from './props';
  8. import { mpMixin } from '../../libs/mixin/mpMixin';
  9. import { mixin } from '../../libs/mixin/mixin';
  10. /**
  11. * SwipeAction 滑动单元格
  12. * @description 该组件一般用于左滑唤出操作菜单的场景,用的最多的是左滑删除操作
  13. * @tutorial https://ijry.github.io/uview-plus/components/swipeAction.html
  14. * @property {Boolean} autoClose 是否自动关闭其他swipe按钮组
  15. * @event {Function(index)} click 点击组件时触发
  16. * @example <u-swipe-action><u-swipe-action-item :rightOptions="options1" ></u-swipe-action-item></u-swipe-action>
  17. */
  18. export default {
  19. name: 'u-swipe-action',
  20. mixins: [mpMixin, mixin, props],
  21. data() {
  22. return {}
  23. },
  24. provide() {
  25. return {
  26. swipeAction: this
  27. }
  28. },
  29. computed: {
  30. // 这里computed的变量,都是子组件u-swipe-action-item需要用到的,由于头条小程序的兼容性差异,子组件无法实时监听父组件参数的变化
  31. // 所以需要手动通知子组件,这里返回一个parentData变量,供watch监听,在其中去通知每一个子组件重新从父组件(u-swipe-action-item)
  32. // 拉取父组件新的变化后的参数
  33. parentData() {
  34. return [this.autoClose]
  35. }
  36. },
  37. emits: ['opendItem:update'],
  38. watch: {
  39. // 当父组件需要子组件需要共享的参数发生了变化,手动通知子组件
  40. parentData() {
  41. if (this.children.length) {
  42. this.children.map(child => {
  43. // 判断子组件(u-swipe-action-item)如果有updateParentData方法的话,就就执行(执行的结果是子组件重新从父组件拉取了最新的值)
  44. typeof(child.updateParentData) === 'function' && child.updateParentData()
  45. })
  46. }
  47. },
  48. opendItem(val) {
  49. if (val == false) {
  50. this.closeAll()
  51. }
  52. }
  53. },
  54. created() {
  55. this.children = []
  56. },
  57. methods: {
  58. closeOther(child) {
  59. if (this.autoClose) {
  60. // 历遍所有的单元格,找出非当前操作中的单元格,进行关闭
  61. this.children.map((item, index) => {
  62. if (child !== item) {
  63. item.closeHandler()
  64. }
  65. })
  66. }
  67. },
  68. closeAll() {
  69. // 关闭所有单元格
  70. this.children.map((item, index) => {
  71. item.closeHandler()
  72. })
  73. },
  74. setOpendItem(ins) {
  75. this.$emit('opendItem:update', true)
  76. }
  77. }
  78. }
  79. </script>
  80. <style lang="scss" scoped>
  81. </style>