Select: fix default-first-option with remote

make default-first-option work with async filter/remote method
test is updated to reflect this change
pull/5127/head
wacky6.AriesMBP 2017-05-26 17:15:30 +08:00 committed by 杨奕
parent 3206c02b40
commit bd2e172fa3
2 changed files with 33 additions and 18 deletions

View File

@ -266,23 +266,7 @@
this.broadcast('ElOptionGroup', 'queryChange');
}
if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {
this.hoverIndex = -1;
for (let i = 0; i !== this.options.length; ++i) {
const option = this.options[i];
if (val) {
// pick first options that passes the filter
if (!option.disabled && !option.groupDisabled && option.visible) {
this.hoverIndex = i;
break;
}
} else {
// pick currently selected option
if (option.itemSelected) {
this.hoverIndex = i;
break;
}
}
}
this.checkDefaultFirstOption();
}
},
@ -346,6 +330,9 @@
if ([].indexOf.call(inputs, document.activeElement) === -1) {
this.setSelected();
}
if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {
this.checkDefaultFirstOption();
}
}
},
@ -651,6 +638,26 @@
handleResize() {
this.resetInputWidth();
if (this.multiple) this.resetInputHeight();
},
checkDefaultFirstOption() {
this.hoverIndex = -1;
for (let i = 0; i !== this.options.length; ++i) {
const option = this.options[i];
if (this.query) {
// pick first options that passes the filter
if (!option.disabled && !option.groupDisabled && option.visible) {
this.hoverIndex = i;
break;
}
} else {
// pick currently selected option
if (option.itemSelected) {
this.hoverIndex = i;
break;
}
}
}
}
},

View File

@ -426,6 +426,14 @@ describe('Select', () => {
options: ['1', '2', '3', '4', '5'],
value: ''
};
},
methods: {
filterMethod(query) {
// simulate async filterMethod / remoteMethod
setTimeout(() => {
this.options.filter(option => option.label.indexOf(query) !== -1);
}, 5);
}
}
}, true);
@ -443,7 +451,7 @@ describe('Select', () => {
expect(select.value).to.equal('3');
done();
}, 10);
}, 10);
}, 10); // wait for async filterMethod
}, 10);
});