Files
aishangjia-uniapp/polyfill/mixins.js
2023-08-04 13:14:48 +08:00

149 lines
4.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* @Author: zhang peng
* @Date: 2021-08-03 10:57:51
* @LastEditTime: 2022-05-04 21:24:16
* @LastEditors: zhang peng
* @Description:
* @FilePath: /miniprogram-to-uniapp2/src/project/template/polyfill/mixins.js
*
* 如果你想删除本文件,请先确认它使用的范围,感谢合作~
* 如有疑问,请直接联系: 375890534@qq.com
*/
export default {
methods: {
/**
* 转义符换成普通字符
* @param {*} str
* @returns
*/
escape2Html (str) {
if (!str) return str
var arrEntities = {
'lt': '<',
'gt': '>',
'nbsp': ' ',
'amp': '&',
'quot': '"'
}
return str.replace(/&(lt|gt|nbsp|amp|quot);/ig, function (all, t) {
return arrEntities[t]
})
},
/**
* 普通字符转换成转义符
* @param {*} sHtml
* @returns
*/
html2Escape (sHtml) {
if (!sHtml) return sHtml
return sHtml.replace(/[<>&"]/g, function (c) {
return {
'<': '&lt;',
'>': '&gt;',
'&': '&amp;',
'"': '&quot;'
}[c]
})
},
/**
* setData polyfill 勿删!!!
* 用于转换后的uniapp的项目能直接使用this.setData()函数
* @param {*} obj
* @param {*} callback
*/
setData: function (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)
},
/**
* 解析事件里的动态函数名,这种没有()的函数名在uniapp不被执行
* 比如:<view bindtap="{{openId==undefined?'denglu':'hy_to'}}">立即</view>
* @param {*} exp
*/
parseEventDynamicCode (e, exp) {
if (typeof (this[exp]) === 'function') {
this[exp](e)
}
},
/**
* 用于处理对props进行赋值的情况
* //简单处理一下就行了
*
* @param {*} target
* @returns
*/
deepClone (target) {
return JSON.parse(JSON.stringify(target))
},
/**
* 用于处理dataset
* 自定义组件的事件里是获取不到e.currentTarget.dataset的
* 因此收集data-参数,手动传进去
*
* @param {*} event
* @param {*} dataSet
* @returns
*/
datasetHandle (event, dataSet = {}) {
if (event && !event.currentTarget) {
if (dataSet.tagId) {
event.currentTarget = {
id: dataSet.tagId
}
} else {
event.currentTarget = {
dataset: dataSet
}
}
}
}
}
}