Press n or j to go to the next uncovered block, b, p or k for the previous block.
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { Doraemon } from '../instance/init'
export type IAnyObject = WechatMiniprogram.IAnyObject
export type Target<
D extends IAnyObject = IAnyObject
> = {
/** 事件组件的 id */
id: string
/** 当前组件的类型 */
tagName?: string
/** 事件组件上由 `data-` 开头的自定义属性组成的集合 */
dataset: D
/** 距离页面顶部的偏移量 */
offsetTop:E number
/** 距离页面左边的偏移量 */
offsetLeft: number
}
export interface BaseCustomEvent<
D extends IAnyObject = IAnyObject,
M extends IAnyObject = IAnyObject,
C extends IAnyObject = IAnyObject,
T extends IAnyObject = C
> extends WechatMiniprogram.BaseEvent<M, C, T> {
/** 额外的信息 */
detail: D
}
export interface CustomEvent<
D extends IAnyObject = IAnyObject,
M extends IAnyObject = IAnyObject,
C extends IAnyObject = IAnyObject,
T extends IAnyObject = C
> extends BaseCustomEvent<D, M, C, T> {
/** 触发事件的源组件 */
target: Target<T> & D
/** 事件绑定的当前组件 */
currentTarget: Target<C> & D
preventDefault(): void
stopPropagation(): void
}
/**
* decorator of an event function
*
* @return MethodDecorator
*/
export function Event(): MethodDecorator {
return function (_target: Doraemon, propertyKey: string, descriptor: any) {
const original = descriptor.value
descriptor.value = function dispatchEvent(e) {
const event: CustomEvent = { ...e }
if (event) {
event.preventDefault = function () {}
event.stopPropagation = function () {}
event.target = event.target || {} as Target
event.currentTarget = event.currentTarget || event.target || {} as Target
event.detail = event.detail || {}
Object.assign(event.target, event.detail)
Object.assign(event.currentTarget, event.detail)
}
return original.call(this, event)
}
}
}
|