mirror of https://github.com/vuejs/vue.git
* don't throw error when node gets relocated * perf: Simplify if check in vdom/patch
This commit is contained in:
parent
9311876c7c
commit
255b627f39
|
|
@ -234,7 +234,9 @@ export function createPatchFunction (backend) {
|
|||
function insert (parent, elm, ref) {
|
||||
if (isDef(parent)) {
|
||||
if (isDef(ref)) {
|
||||
nodeOps.insertBefore(parent, elm, ref)
|
||||
if (ref.parentNode === parent) {
|
||||
nodeOps.insertBefore(parent, elm, ref)
|
||||
}
|
||||
} else {
|
||||
nodeOps.appendChild(parent, elm)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -366,4 +366,46 @@ describe('Component', () => {
|
|||
Vue.config.errorHandler = null
|
||||
}).then(done)
|
||||
})
|
||||
|
||||
it('relocates node without error', done => {
|
||||
const el = document.createElement('div')
|
||||
document.body.appendChild(el)
|
||||
const target = document.createElement('div')
|
||||
document.body.appendChild(target)
|
||||
|
||||
const Test = {
|
||||
render (h) {
|
||||
return h('div', { class: 'test' }, this.$slots.default)
|
||||
},
|
||||
mounted () {
|
||||
target.appendChild(this.$el)
|
||||
},
|
||||
beforeDestroy () {
|
||||
const parent = this.$el.parentNode
|
||||
if (parent) {
|
||||
parent.removeChild(this.$el)
|
||||
}
|
||||
}
|
||||
}
|
||||
const vm = new Vue({
|
||||
data () {
|
||||
return {
|
||||
view: true
|
||||
}
|
||||
},
|
||||
template: `<div><test v-if="view">Test</test></div>`,
|
||||
components: {
|
||||
test: Test
|
||||
}
|
||||
}).$mount(el)
|
||||
|
||||
expect(el.outerHTML).toBe('<div></div>')
|
||||
expect(target.outerHTML).toBe('<div><div class="test">Test</div></div>')
|
||||
vm.view = false
|
||||
waitForUpdate(() => {
|
||||
expect(el.outerHTML).toBe('<div></div>')
|
||||
expect(target.outerHTML).toBe('<div></div>')
|
||||
vm.$destroy()
|
||||
}).then(done)
|
||||
})
|
||||
})
|
||||
|
|
|
|||
Loading…
Reference in New Issue