mirror of https://github.com/IoTcat/docsify.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
902 B
45 lines
902 B
import {noop} from '../util/core' |
|
|
|
export function initLifecycle(vm) { |
|
const hooks = [ |
|
'init', |
|
'mounted', |
|
'beforeEach', |
|
'afterEach', |
|
'doneEach', |
|
'ready' |
|
] |
|
|
|
vm._hooks = {} |
|
vm._lifecycle = {} |
|
hooks.forEach(hook => { |
|
const arr = (vm._hooks[hook] = []) |
|
vm._lifecycle[hook] = fn => arr.push(fn) |
|
}) |
|
} |
|
|
|
export function callHook(vm, hook, data, next = noop) { |
|
const queue = vm._hooks[hook] |
|
|
|
const step = function (index) { |
|
const hook = queue[index] |
|
if (index >= queue.length) { |
|
next(data) |
|
} else if (typeof hook === 'function') { |
|
if (hook.length === 2) { |
|
hook(data, result => { |
|
data = result |
|
step(index + 1) |
|
}) |
|
} else { |
|
const result = hook(data) |
|
data = result === undefined ? data : result |
|
step(index + 1) |
|
} |
|
} else { |
|
step(index + 1) |
|
} |
|
} |
|
|
|
step(0) |
|
}
|
|
|