test('force block for inline before-update handlers w/ children', () => {
expect(
- parseWithElementTransform(`<div @vnode-before-update>hello</div>`).node
- .isBlock
- ).toBe(true)
-
- expect(
- parseWithElementTransform(`<div @vnodeBeforeUpdate>hello</div>`).node
+ parseWithElementTransform(`<div @vue:before-update>hello</div>`).node
.isBlock
).toBe(true)
})
})
})
+ test('vue: prefixed events', () => {
+ const { node } = parseWithVOn(
+ `<div v-on:vue:mounted="onMount" @vue:before-update="onBeforeUpdate" />`
+ )
+ expect((node.codegenNode as VNodeCall).props).toMatchObject({
+ properties: [
+ {
+ key: {
+ content: `onVnodeMounted`
+ },
+ value: {
+ content: `onMount`
+ }
+ },
+ {
+ key: {
+ content: `onVnodeBeforeUpdate`
+ },
+ value: {
+ content: `onBeforeUpdate`
+ }
+ }
+ ]
+ })
+ })
+
describe('cacheHandler', () => {
test('empty handler', () => {
const { root, node } = parseWithVOn(`<div v-on:click.prevent />`, {
(isVBind && isStaticArgOf(arg, 'key')) ||
// inline before-update hooks need to force block so that it is invoked
// before children
- (isVOn && hasChildren && isStaticArgOf(arg, 'vnodeBeforeUpdate', true))
+ (isVOn && hasChildren && isStaticArgOf(arg, 'vue:before-update'))
) {
shouldUseBlock = true
}
let eventName: ExpressionNode
if (arg.type === NodeTypes.SIMPLE_EXPRESSION) {
if (arg.isStatic) {
- const rawName = arg.content
+ let rawName = arg.content
+ // TODO deprecate @vnodeXXX usage
+ if (rawName.startsWith('vue:')) {
+ rawName = `vnode-${rawName.slice(4)}`
+ }
// for all event listeners, auto convert it to camelCase. See issue #2249
eventName = createSimpleExpression(
toHandlerKey(camelize(rawName)),
WITH_MEMO,
OPEN_BLOCK
} from './runtimeHelpers'
-import {
- isString,
- isObject,
- hyphenate,
- extend,
- NOOP,
- camelize
-} from '@vue/shared'
+import { isString, isObject, hyphenate, extend, NOOP } from '@vue/shared'
import { PropsExpression } from './transforms/transformElement'
import { parseExpression } from '@babel/parser'
import { Expression } from '@babel/types'
export function isStaticArgOf(
arg: DirectiveNode['arg'],
- name: string,
- camel?: boolean
+ name: string
): boolean {
- return !!(
- arg &&
- isStaticExp(arg) &&
- (camel ? camelize(arg.content) : arg.content) === name
- )
+ return !!(arg && isStaticExp(arg) && arg.content === name)
}
export function hasDynamicKeyVBind(node: ElementNode): boolean {