handle recursive traces

This commit is contained in:
Evan You 2017-04-10 17:48:37 +08:00
parent 4b6913cb46
commit 9fe26a6327

View File

@ -55,7 +55,19 @@ if (process.env.NODE_ENV !== 'production') {
const generateComponentTrace = vm => { const generateComponentTrace = vm => {
if (vm._isVue && vm.$parent && String.prototype.repeat) { if (vm._isVue && vm.$parent && String.prototype.repeat) {
const tree = [] const tree = []
let currentRecursiveSequence = 0
while (vm) { while (vm) {
if (tree.length > 0) {
const last = tree[tree.length - 1]
if (last.constructor === vm.constructor) {
currentRecursiveSequence++
vm = vm.$parent
continue
} else if (currentRecursiveSequence > 0) {
tree[tree.length - 1] = [last, currentRecursiveSequence]
currentRecursiveSequence = 0
}
}
tree.push(vm) tree.push(vm)
vm = vm.$parent vm = vm.$parent
} }
@ -63,7 +75,9 @@ if (process.env.NODE_ENV !== 'production') {
.map((vm, i) => `${ .map((vm, i) => `${
i === 0 ? '---> ' : ' '.repeat(5 + i * 2) i === 0 ? '---> ' : ' '.repeat(5 + i * 2)
}${ }${
formatComponentName(vm) Array.isArray(vm)
? `${formatComponentName(vm[0])}... (${vm[1]} recursive calls)`
: formatComponentName(vm)
}`) }`)
.join('\n') .join('\n')
} else { } else {