Browse Source

polish: add warning when .native modifier is used on native HTML elements (#9884)

dev
Natalia Tepluhina 6 years ago
committed by Evan You
parent
commit
861aea1661
  1. 6
      src/core/vdom/create-element.js
  2. 14
      test/unit/features/directives/on.spec.js

6
src/core/vdom/create-element.js

@ -98,6 +98,12 @@ export function _createElement (
ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag)
if (config.isReservedTag(tag)) {
// platform built-in elements
if (process.env.NODE_ENV !== 'production' && isDef(data) && isDef(data.nativeOn)) {
warn(
`The .native modifier for v-on is only valid on components but it was used on <${tag}>.`,
context
)
}
vnode = new VNode(
config.parsePlatformTagName(tag), data, children,
undefined, undefined, context

14
test/unit/features/directives/on.spec.js

@ -460,6 +460,20 @@ describe('Directive v-on', () => {
expect(spy).toHaveBeenCalled()
})
it('should throw a warning if native modifier is used on native HTML element', () => {
vm = new Vue({
el,
template: `
<button @click.native="foo"></button>
`,
methods: { foo: spy },
})
triggerEvent(vm.$el, 'click')
expect(`The .native modifier for v-on is only valid on components but it was used on <button>.`).toHaveBeenWarned()
expect(spy.calls.count()).toBe(0)
})
it('.once modifier should work with child components', () => {
vm = new Vue({
el,

Loading…
Cancel
Save