(vnode, rm)
| 8482 | } |
| 8483 | |
| 8484 | function removeAndInvokeRemoveHook(vnode, rm) { |
| 8485 | if (isDef(rm) || isDef(vnode.data)) { |
| 8486 | var i; |
| 8487 | var listeners = cbs.remove.length + 1; |
| 8488 | if (isDef(rm)) { |
| 8489 | // we have a recursively passed down rm callback |
| 8490 | // increase the listeners count |
| 8491 | rm.listeners += listeners; |
| 8492 | } else { |
| 8493 | // directly removing |
| 8494 | rm = createRmCb(vnode.elm, listeners); |
| 8495 | } |
| 8496 | // recursively invoke hooks on child component root node |
| 8497 | if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) { |
| 8498 | removeAndInvokeRemoveHook(i, rm); |
| 8499 | } |
| 8500 | for (i = 0; i < cbs.remove.length; ++i) { |
| 8501 | cbs.remove[i](vnode, rm); |
| 8502 | } |
| 8503 | if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) { |
| 8504 | i(vnode, rm); |
| 8505 | } else { |
| 8506 | rm(); |
| 8507 | } |
| 8508 | } else { |
| 8509 | removeNode(vnode.elm); |
| 8510 | } |
| 8511 | } |
| 8512 | |
| 8513 | |
| 8514 | // ddif 算法 |
no test coverage detected