-
zhangwei
2 天以前 89b94f3cc1aa492b3223b97f3312d8eca004032b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { computed } from 'vue'
export const saulVModel = <T extends Readonly<{ [k: string]: any }>, K extends keyof T>(
  props: T,
  propName: K,
  emit: (...args: any[]) => void
) => {
  return computed({
    get() {
      if (typeof props[propName] === 'object') {
        return new Proxy(props[propName], {
          set(obj, name, val) {
            emit(`update:${String(propName)}`, { ...obj, [name]: val })
            return true
          }
        })
      }
      return props[propName]
    },
    set(val) {
      emit(`update:${String(propName)}`, val)
    }
  })
}