'f'
mh-two-thousand-and-two
2024-04-12 26f2711ef9461961fb953e2b497bd314ef95e345
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import {
  isFn,
  hasOwn,
  isPlainObject
} from 'uni-shared'
 
import {
  proxy
} from './proxy'
 
import {
  SOURCE_KEY
} from '../../constants'
 
function setDataByExprPath (exprPath, value, data) {
  const keys = exprPath.replace(/\[(\d+?)\]/g, '.$1').split('.')
  keys.reduce((obj, key, idx) => {
    if (idx === keys.length - 1) {
      obj[key] = value
    } else {
      if (typeof obj[key] === 'undefined') {
        obj[key] = {}
      }
      return obj[key]
    }
  }, data)
  return keys.length === 1
}
 
export function setData (data, callback) {
  if (!isPlainObject(data)) {
    return
  }
  Object.keys(data).forEach(key => {
    if (setDataByExprPath(key, data[key], this.data)) {
      !hasOwn(this, key) && proxy(this, SOURCE_KEY, key)
    }
  })
  this.$forceUpdate()
  isFn(callback) && this.$nextTick(callback)
}