Meituan-Dianping/mpvue · error

v-on without argument expects an Object value

Error message

v-on without argument expects an Object value

What it means

Raised by the bindObjectListeners render helper, which implements the object syntax v-on="value" (e.g. <div v-on="listeners">). The bound expression's value is truthy but isPlainObject(value) is false — a string, number, array or other non-object was passed where a map of event names to handlers is required. The helper then skips merging, so those listeners are silently dropped from the VNode.

Source

Thrown at src/core/instance/render-helpers/bind-object-listeners.js:8

/* @flow */

import { warn, extend, isPlainObject } from 'core/util/index'

export function bindObjectListeners (data: any, value: any): VNodeData {
  if (value) {
    if (!isPlainObject(value)) {
      process.env.NODE_ENV !== 'production' && warn(
        'v-on without argument expects an Object value',
        this
      )
    } else {
      const on = data.on = data.on ? extend({}, data.on) : {}
      for (const key in value) {
        const existing = on[key]
        const ours = value[key]
        on[key] = existing ? [].concat(ours, existing) : ours
      }
    }
  }
  return data
}

View on GitHub (pinned to 6c5d78ee04)

Solutions

  1. Pass an object mapping event names to handlers: v-on="{ click: onClick, input: onInput }"
  2. Ensure the bound variable/computed actually evaluates to a plain object at render time (check its initial value and any conditional logic)
  3. Use the normal v-on:event syntax if you only need a single handler
Defensive patterns

Strategy: type-guard

When it happens

Trigger: Thrown at src/core/instance/render-helpers/bind-object-listeners.js:8 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Meituan-Dianping/mpvue@6c5d78ee04 (2026-09-02). Data as JSON: /api/errors/30a674537f73135e. Report an issue: GitHub.