Просмотр исходного кода

Node maybe be removed v-html/v-text (#4548)

chengchao 9 лет назад
Родитель
Сommit
71cc0a575b
2 измененных файлов с 15 добавлено и 5 удалено
  1. 5 5
      src/core/vdom/patch.js
  2. 10 0
      test/unit/modules/vdom/modules/dom-props.spec.js

+ 5 - 5
src/core/vdom/patch.js

@@ -69,16 +69,16 @@ export function createPatchFunction (backend) {
   function createRmCb (childElm, listeners) {
     function remove () {
       if (--remove.listeners === 0) {
-        removeElement(childElm)
+        removeNode(childElm)
       }
     }
     remove.listeners = listeners
     return remove
   }
 
-  function removeElement (el) {
+  function removeNode (el) {
     const parent = nodeOps.parentNode(el)
-    // element may have already been removed due to v-html
+    // element may have already been removed due to v-html / v-text
     if (parent) {
       nodeOps.removeChild(parent, el)
     }
@@ -298,7 +298,7 @@ export function createPatchFunction (backend) {
           removeAndInvokeRemoveHook(ch)
           invokeDestroyHook(ch)
         } else { // Text node
-          nodeOps.removeChild(parentElm, ch.elm)
+          removeNode(ch.elm)
         }
       }
     }
@@ -328,7 +328,7 @@ export function createPatchFunction (backend) {
         rm()
       }
     } else {
-      removeElement(vnode.elm)
+      removeNode(vnode.elm)
     }
   }
 

+ 10 - 0
test/unit/modules/vdom/modules/dom-props.spec.js

@@ -52,6 +52,16 @@ describe('vdom domProps module', () => {
     const elm2 = patch(null, vnode2)
     expect(elm2.textContent).toBe('hi')
     expect(vnode2.children.length).toBe(0)
+
+    const vnode3 = new VNode('div', undefined, undefined, '123')
+    patch(null, vnode3)
+    const elm3 = patch(vnode3, vnode2)
+    expect(elm3.textContent).toBe('hi')
+
+    const vnode4 = new VNode('div', undefined, undefined, new VNode('span'))
+    patch(null, vnode4)
+    const elm4 = patch(vnode4, vnode)
+    expect(elm4.textContent).toBe('hi')
   })
 
   it('should handle mutating observed props object', done => {