首次提交
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
import _set from '../utils/_set'
|
||||
import debounce from '../utils/debounce'
|
||||
|
||||
/**
|
||||
* 老setData polyfill
|
||||
* 用于转换后的uniapp的项目能直接使用this.setData()函数
|
||||
* @param {*} obj
|
||||
* @param {*} callback
|
||||
*/
|
||||
function oldSetData (obj, callback) {
|
||||
let that = this
|
||||
const handleData = (tepData, tepKey, afterKey) => {
|
||||
var tepData2 = tepData
|
||||
tepKey = tepKey.split('.')
|
||||
tepKey.forEach(item => {
|
||||
if (tepData[item] === null || tepData[item] === undefined) {
|
||||
let reg = /^[0-9]+$/
|
||||
tepData[item] = reg.test(afterKey) ? [] : {}
|
||||
tepData2 = tepData[item]
|
||||
} else {
|
||||
tepData2 = tepData[item]
|
||||
}
|
||||
})
|
||||
return tepData2
|
||||
}
|
||||
const isFn = function (value) {
|
||||
return typeof value == 'function' || false
|
||||
}
|
||||
Object.keys(obj).forEach(function (key) {
|
||||
let val = obj[key]
|
||||
key = key.replace(/\]/g, '').replace(/\[/g, '.')
|
||||
let front, after
|
||||
let index_after = key.lastIndexOf('.')
|
||||
if (index_after != -1) {
|
||||
after = key.slice(index_after + 1)
|
||||
front = handleData(that, key.slice(0, index_after), after)
|
||||
} else {
|
||||
after = key
|
||||
front = that
|
||||
}
|
||||
if (front.$data && front.$data[after] === undefined) {
|
||||
Object.defineProperty(front, after, {
|
||||
get () {
|
||||
return front.$data[after]
|
||||
},
|
||||
set (newValue) {
|
||||
front.$data[after] = newValue
|
||||
that.hasOwnProperty("$forceUpdate") && that.$forceUpdate()
|
||||
},
|
||||
enumerable: true,
|
||||
configurable: true
|
||||
})
|
||||
front[after] = val
|
||||
} else {
|
||||
that.$set(front, after, val)
|
||||
}
|
||||
})
|
||||
// this.$forceUpdate();
|
||||
isFn(callback) && this.$nextTick(callback)
|
||||
}
|
||||
|
||||
/**
|
||||
* 变量名正则
|
||||
*/
|
||||
const variableNameReg = /^([^\x00-\xff]|[a-zA-Z_$])([^\x00-\xff]|[a-zA-Z0-9_$])*$/
|
||||
|
||||
|
||||
/**
|
||||
* 2022-10-31 重写setData
|
||||
* 2023-05-08 增加微信“简易双向绑定”支持
|
||||
* 用于转换后的uniapp的项目能直接使用this.setData()函数
|
||||
* @param {Object} obj
|
||||
* @param {Object} callback
|
||||
*/
|
||||
export function setData (obj, callback = null) {
|
||||
Object.keys(obj).forEach((key) => {
|
||||
_set(this, key, obj[key])
|
||||
|
||||
//处理微信“简易双向绑定”
|
||||
if (variableNameReg.test(key) && key.endsWith("Clone")) {
|
||||
let propName = key.replace(/Clone$/, "")
|
||||
if (this.$options && this.$options.propsData[propName]) {
|
||||
this.$emit(`update:${propName}`, obj[key])
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
this.$forceUpdate();
|
||||
if (typeof callback == 'function') this.$nextTick(callback)
|
||||
}
|
||||
Reference in New Issue
Block a user