Skip to content

Commit

Permalink
feat(warns): avoid warning native modifiers on dynamic components (#1…
Browse files Browse the repository at this point in the history
…1052)

Co-authored-by: Andrzej Swaton <andrzej@diligen.com>
  • Loading branch information
jedrula and andrzejatdiligen authored Mar 30, 2021
1 parent 529016b commit 3d46692
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/core/vdom/create-element.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ 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)) {
if (process.env.NODE_ENV !== 'production' && isDef(data) && isDef(data.nativeOn) && data.tag !== 'component') {
warn(
`The .native modifier for v-on is only valid on components but it was used on <${tag}>.`,
context
Expand Down
14 changes: 14 additions & 0 deletions test/unit/features/directives/on.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -474,6 +474,20 @@ describe('Directive v-on', () => {
expect(spy.calls.count()).toBe(0)
})

it('should not throw a warning if native modifier is used on a dynamic component', () => {
vm = new Vue({
el,
template: `
<component is="div" @click.native="foo('native')" @click="foo('regular')"/>
`,
methods: { foo: spy },
})

triggerEvent(vm.$el, 'click')
expect(`The .native modifier for v-on is only valid on components but it was used on <div>.`).not.toHaveBeenWarned()
expect(spy.calls.allArgs()).toEqual([['regular']]); // Regular @click should work for dynamic components resolved to native HTML elements.
})

it('.once modifier should work with child components', () => {
vm = new Vue({
el,
Expand Down

0 comments on commit 3d46692

Please sign in to comment.