diff --git a/packages/alpinejs/src/lifecycle.js b/packages/alpinejs/src/lifecycle.js index 81c1226d7..7511f8275 100644 --- a/packages/alpinejs/src/lifecycle.js +++ b/packages/alpinejs/src/lifecycle.js @@ -82,13 +82,18 @@ export function interceptInit(callback) { initInterceptors.push(callback) } export function initTree(el, walker = walk, intercept = () => {}) { deferHandlingDirectives(() => { walker(el, (el, skip) => { - intercept(el, skip) - - initInterceptors.forEach(i => i(el, skip)) - - directives(el, el.attributes).forEach(handle => handle()) - - el._x_ignore && skip() + if (!el._x_isInit) { + intercept(el, skip) + + initInterceptors.forEach(i => i(el, skip)) + directives(el, el.attributes).forEach(handle => handle()) + } + + if (el._x_ignore) { + skip() + } else { + el._x_isInit = true + } }) }) } @@ -97,5 +102,6 @@ export function destroyTree(root) { walk(root, el => { cleanupAttributes(el) cleanupElement(el) + delete el._x_isInit }) } diff --git a/packages/alpinejs/src/mutation.js b/packages/alpinejs/src/mutation.js index 72905ec8b..29e396784 100644 --- a/packages/alpinejs/src/mutation.js +++ b/packages/alpinejs/src/mutation.js @@ -194,10 +194,6 @@ function onMutate(mutations) { node._x_ignore = true }) for (let node of addedNodes) { - // If an element gets moved on a page, it's registered - // as both an "add" and "remove", so we want to skip those. - if (removedNodes.includes(node)) continue - // If the node was eventually removed as part of one of his // parent mutations, skip it if (! node.isConnected) continue