Commit 11a6548375b3ac8f8325326abe99861983ba760d

Authored by 刘汉宸
1 parent e6018051

fix: 修复Select组件change事件返回值

examples/views/docs/component/select.md
@@ -207,7 +207,7 @@ export default { @@ -207,7 +207,7 @@ export default {
207 <template> 207 <template>
208 <div> 208 <div>
209 <pre class="demo-model" v-if="model">{{ model }}</pre> 209 <pre class="demo-model" v-if="model">{{ model }}</pre>
210 - <z-select v-model="model" url="/user/select" :http="$http"></z-select> 210 + <z-select v-model="model" url="/user/commonSelect" value-key="id" :http="$http" @change="onChange"></z-select>
211 </div> 211 </div>
212 </template> 212 </template>
213 213
@@ -218,6 +218,11 @@ export default { @@ -218,6 +218,11 @@ export default {
218 model: '', 218 model: '',
219 } 219 }
220 }, 220 },
  221 + methods: {
  222 + onChange(value, item) {
  223 + console.log(value, item);
  224 + }
  225 + }
221 } 226 }
222 </script> 227 </script>
223 ``` 228 ```
packages/select/index.vue
@@ -133,21 +133,25 @@ export default { @@ -133,21 +133,25 @@ export default {
133 remote() { 133 remote() {
134 return Boolean(this.queryApi || (this.url && (this.http || this.zHttp))); 134 return Boolean(this.queryApi || (this.url && (this.http || this.zHttp)));
135 }, 135 },
  136 + // Hack绑定事件,即令el-select组件绑定事件与当前z-select组件相同,且扩展部分事件返回值
136 bindEvents() { 137 bindEvents() {
137 let _events = {}; 138 let _events = {};
138 Object.keys(this.$listeners || {}).forEach(key => { 139 Object.keys(this.$listeners || {}).forEach(key => {
139 // 非绑定对象的情况下,通过change事件向上emit出当前选中项 140 // 非绑定对象的情况下,通过change事件向上emit出当前选中项
140 if (key === 'change' && !this.raw) { 141 if (key === 'change' && !this.raw) {
  142 + // 给el-select绑定change事件,且emit到z-select的change事件并拓展
141 _events[key] = value => { 143 _events[key] = value => {
142 this.$emit( 144 this.$emit(
143 key, 145 key,
144 value, 146 value,
145 - this.optionsCurrent.reduce((result, item) => {  
146 - if (value.includes(item[this.valueKey])) {  
147 - result.push(item);  
148 - }  
149 - return result;  
150 - }, []), 147 + this.multiple
  148 + ? this.optionsCurrent.reduce((result, item) => {
  149 + if (value.includes(item[this.valueKey])) {
  150 + result.push(item);
  151 + }
  152 + return result;
  153 + }, [])
  154 + : this.optionsCurrent.find(item => item[this.valueKey] === value),
151 ); 155 );
152 }; 156 };
153 } else { 157 } else {