vxe-table-select-area
Version:
一个基于 vxe-table 的可区域选中复制、粘贴的组件
78 lines (66 loc) • 1.57 kB
JavaScript
/* eslint-disable prefer-const */
/*
hook system
*/
export default class Hooks {
constructor () {
// ...
this.hooks = {
/*
table-scroll1:[
function(){},
function(){}
],
table-scroll2:[
function(){},
function(){}
]
*/
}
}
/**
* Add listener to plugin hooks system.
*
* @param {string} hookName The hook name.
* @param {Function} callback The listener function to add.
*/
addHook (hookName, callback) {
let hooks
if (!this.hooks[hookName]) {
this.hooks[hookName] = []
}
hooks = this.hooks[hookName]
// exclude repeat hook
let isRepeat = false
for (let i = 0; i < hooks.length; i++) {
if (hooks[i] === callback) {
isRepeat = true
break
}
}
if (isRepeat) {
console.warn(`Repeat hook name:${hookName}`)
} else {
hooks.push(callback)
}
}
/**
* Trigger hook.
*
* @param {string} hookName The hook name.
* @param {Argument} args
*/
triggerHook (hookName) {
const hooks = this.hooks[hookName]
if (hooks && hooks.length) {
const args = Array.prototype.slice.call(arguments)
hooks.forEach((hook) => {
// exclude hookName param
hook.apply(null, args.slice(1))
})
}
// else {
// console.warn(`Can't find hook name:${hookName}`);
// }
}
}