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)
| }
|
|