diff --git a/src/utils/vnode.js b/src/utils/vnode.js index 83b9083bc..0163d00a5 100644 --- a/src/utils/vnode.js +++ b/src/utils/vnode.js @@ -57,22 +57,21 @@ export function findModelConfig (vnode) { // Adds a listener to vnode listener object. export function mergeVNodeListeners (obj, eventName, handler) { - // Has a single listener. + // Has a single listener, convert to array. if (isCallable(obj[eventName])) { const prevHandler = obj[eventName]; obj[eventName] = [prevHandler]; } - // has other listeners. - if (Array.isArray(obj[eventName])) { - obj[eventName].push(handler); - return; - } - - // no listener at all. + // no listeners, create the array. if (isNullOrUndefined(obj[eventName])) { - obj[eventName] = [handler]; + obj[eventName] = []; + } else { + // clean up the array #2185 + obj[eventName] = obj[eventName].filter(ev => !ev._vee_isUnique); } + + obj[eventName].push(handler); } // Adds a listener to a native HTML vnode.