[bugfix] Dialog: beforeClose not work for click overlay (#2707)

This commit is contained in:
neverland 2019-02-09 10:26:05 +08:00 committed by GitHub
parent 683e6d5183
commit e64b908a32
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 6 deletions

View File

@ -41,8 +41,13 @@ export default sfc({
},
methods: {
onClickOverlay() {
this.handleAction('overlay');
},
handleAction(action) {
this.$emit(action);
if (this.beforeClose) {
this.loading[action] = true;
this.beforeClose(action, state => {
@ -57,8 +62,11 @@ export default sfc({
},
onClose(action) {
this.$emit('input', false);
this.callback && this.callback(action);
this.close();
if (this.callback) {
this.callback(action);
}
}
},

View File

@ -1,7 +1,7 @@
import Vue from 'vue';
import Dialog from '..';
import DialogVue from '../Dialog';
import { mount, later, transitionStub } from '../../../test/utils';
import { mount, later, trigger, transitionStub } from '../../../test/utils';
transitionStub();
@ -39,6 +39,7 @@ test('before close', () => {
propsData: {
value: true,
showCancelButton: true,
closeOnClickOverlay: true,
beforeClose: (action, done) => done(false)
}
});
@ -49,10 +50,19 @@ test('before close', () => {
expect(wrapper.emitted('input')).toBeFalsy();
wrapper.setProps({
beforeClose: (action, done) => done()
beforeClose: (action, done) => {
if (action === 'cancel') {
done();
}
}
});
const overlay = document.querySelector('.van-overlay');
trigger(overlay, 'click');
expect(wrapper.emitted('input')).toBeFalsy();
cancel.trigger('click');
expect(wrapper.emitted('input')).toBeTruthy();
expect(wrapper.emitted('input')[0]).toBeTruthy();
});
test('set default options', () => {

View File

@ -63,7 +63,14 @@ export default {
if (context.top) {
const { vm } = context.top;
vm.$emit('click-overlay');
vm.closeOnClickOverlay && vm.$emit('input', false);
if (vm.closeOnClickOverlay) {
if (vm.onClickOverlay) {
vm.onClickOverlay();
} else {
vm.close();
}
}
}
}
};