diff --git a/components/_util/props-util.js b/components/_util/props-util.js index 5ab8f07dd..4868f59c0 100644 --- a/components/_util/props-util.js +++ b/components/_util/props-util.js @@ -201,7 +201,7 @@ export function getEvents(child) { // use getListeners instead this.$listeners // https://github.com/vueComponent/ant-design-vue/issues/1705 export function getListeners(context) { - return context.$vnode ? context.$vnode.componentOptions.listeners || {} : context.$listeners; + return (context.$vnode ? context.$vnode.componentOptions.listeners : context.$listeners) || {}; } export function getClass(ele) { let data = {}; diff --git a/components/_util/proxyComponent.jsx b/components/_util/proxyComponent.jsx index e8aeee39d..5a13daa8a 100644 --- a/components/_util/proxyComponent.jsx +++ b/components/_util/proxyComponent.jsx @@ -1,5 +1,5 @@ import PropTypes from './vue-types'; -import { getOptionProps } from './props-util'; +import { getOptionProps, getListeners } from './props-util'; function getDisplayName(WrappedComponent) { return WrappedComponent.name || 'Component'; @@ -23,7 +23,7 @@ export default function wrapWithConnect(WrappedComponent) { }, }, render() { - const { $listeners, $slots = {}, $scopedSlots } = this; + const { $slots = {}, $scopedSlots } = this; const props = getOptionProps(this); const wrapProps = { props: { @@ -32,7 +32,7 @@ export default function wrapWithConnect(WrappedComponent) { componentWillReceiveProps: { ...props }, children: $slots.default || props.children || [], }, - on: $listeners, + on: getListeners(this), }; if (Object.keys($scopedSlots).length) { wrapProps.scopedSlots = $scopedSlots; diff --git a/components/_util/store/connect.jsx b/components/_util/store/connect.jsx index fb2274980..3fab39ef6 100644 --- a/components/_util/store/connect.jsx +++ b/components/_util/store/connect.jsx @@ -1,6 +1,6 @@ import shallowEqual from 'shallowequal'; import omit from 'omit.js'; -import { getOptionProps } from '../props-util'; +import { getOptionProps, getListeners } from '../props-util'; import PropTypes from '../vue-types'; import proxyComponent from '../proxyComponent'; @@ -81,7 +81,7 @@ export default function connect(mapStateToProps) { }, render() { this.preProps = { ...this.$props }; - const { $listeners, $slots = {}, $scopedSlots, subscribed, store } = this; + const { $slots = {}, $scopedSlots, subscribed, store } = this; const props = getOptionProps(this); this.preProps = { ...omit(props, ['__propsSymbol__']) }; const wrapProps = { @@ -90,7 +90,7 @@ export default function connect(mapStateToProps) { ...subscribed, store, }, - on: $listeners, + on: getListeners(this), scopedSlots: $scopedSlots, }; return ( diff --git a/components/auto-complete/InputElement.jsx b/components/auto-complete/InputElement.jsx index 10cdefcc4..ab84209e2 100644 --- a/components/auto-complete/InputElement.jsx +++ b/components/auto-complete/InputElement.jsx @@ -1,6 +1,6 @@ import PropTypes from '../_util/vue-types'; import { cloneElement } from '../_util/vnode'; -import { getOptionProps } from '../_util/props-util'; +import { getOptionProps, getListeners } from '../_util/props-util'; function chaining(...fns) { return function(...args) { // eslint-disable-line @@ -14,6 +14,7 @@ function chaining(...fns) { } export default { name: 'InputElement', + inheritAttrs: false, props: { value: PropTypes.any, disabled: PropTypes.bool, @@ -30,16 +31,17 @@ export default { }, render() { - const { $slots = {}, $listeners = {}, $attrs = {} } = this; + const { $slots = {}, $attrs = {} } = this; + const listeners = getListeners(this); const props = getOptionProps(this); const value = props.value === undefined ? '' : props.value; const children = $slots.default[0]; const { componentOptions = {} } = $slots.default[0]; - const { listeners = {} } = componentOptions; - const newEvent = { ...listeners }; + const { listeners: events = {} } = componentOptions; + const newEvent = { ...events }; - for (const [eventName, event] of Object.entries($listeners)) { - newEvent[eventName] = chaining(event, listeners[eventName]); + for (const [eventName, event] of Object.entries(listeners)) { + newEvent[eventName] = chaining(event, events[eventName]); } return cloneElement(children, { diff --git a/components/auto-complete/__tests__/__snapshots__/demo.test.js.snap b/components/auto-complete/__tests__/__snapshots__/demo.test.js.snap index be5255332..c96a8fb2a 100644 --- a/components/auto-complete/__tests__/__snapshots__/demo.test.js.snap +++ b/components/auto-complete/__tests__/__snapshots__/demo.test.js.snap @@ -23,7 +23,7 @@ exports[`renders ./components/auto-complete/demo/certain-category.md correctly 1