Select add prefix prop and slot. close #5477

This commit is contained in:
梁灏 2019-04-08 15:47:07 +08:00
parent 707898f2ad
commit 2739fc29cc
4 changed files with 73 additions and 8 deletions

View file

@ -1,12 +1,46 @@
<template> <template>
<div style="margin: 200px;"> <div style="margin: 100px;">
<Select size="small" v-model="model10" multiple style="width:260px"> <Select v-model="model1" style="width:200px" prefix="ios-albums">
<Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option> <Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select> </Select>
<Select v-model="model10" multiple style="width:260px">
<Select v-model="model10" multiple style="width:260px" prefix="ios-albums">
<Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option> <Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select> </Select>
<Select size="large" v-model="model10" multiple style="width:260px">
<br><br>
<Select v-model="model1" style="width:200px">
<Icon type="ios-alarm" slot="prefix" color="red" />
<Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
<Select v-model="model1" style="width:200px">
<Avatar src="https://dev-file.iviewui.com/userinfoPDvn9gKWYihR24SpgC319vXY8qniCqj4/avatar" slot="prefix" size="small" />
<Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
<Select v-model="model10" multiple style="width:260px" prefix="ios-albums">
<Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
<br><br>
<Select size="small" v-model="model1" style="width:200px" prefix="ios-albums">
<Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
<Select size="small" v-model="model10" multiple style="width:260px" prefix="ios-albums">
<Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
<br><br>
<Select size="large" v-model="model1" style="width:200px" prefix="ios-albums">
<Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select>
<Select size="large" v-model="model10" multiple style="width:260px" prefix="ios-albums">
<Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option> <Option v-for="item in cityList" :value="item.value" :key="item.value">{{ item.label }}</Option>
</Select> </Select>
</div> </div>
@ -22,7 +56,7 @@
}, },
{ {
value: 'London', value: 'London',
label: 'LondonLondonLondonLondonLondonLondonLondonLondonLondonLondonLondonLondonLondonLondonLondonLondonLondonLondon' label: 'London'
}, },
{ {
value: 'Sydney', value: 'Sydney',
@ -41,7 +75,8 @@
label: 'Canberra' label: 'Canberra'
} }
], ],
model10: ['New York', 'London'] model1: '',
model10: []
} }
} }
} }

View file

@ -1,5 +1,10 @@
<template> <template>
<div @click="onHeaderClick"> <div @click="onHeaderClick">
<span :class="[prefixCls + '-prefix']" v-if="$slots.prefix || prefix">
<slot name="prefix">
<Icon :type="prefix" v-if="prefix" />
</slot>
</span>
<div class="ivu-tag ivu-tag-checked" v-for="item in selectedMultiple"> <div class="ivu-tag ivu-tag-checked" v-for="item in selectedMultiple">
<span class="ivu-tag-text">{{ item.label }}</span> <span class="ivu-tag-text">{{ item.label }}</span>
<Icon type="ios-close" @click.native.stop="removeTag(item)"></Icon> <Icon type="ios-close" @click.native.stop="removeTag(item)"></Icon>
@ -77,7 +82,10 @@
queryProp: { queryProp: {
type: String, type: String,
default: '' default: ''
} },
prefix: {
type: String
},
}, },
data () { data () {
return { return {
@ -92,6 +100,7 @@
singleDisplayClasses(){ singleDisplayClasses(){
const {filterable, multiple, showPlaceholder} = this; const {filterable, multiple, showPlaceholder} = this;
return [{ return [{
[prefixCls + '-head-with-prefix']: this.$slots.prefix || this.prefix,
[prefixCls + '-placeholder']: showPlaceholder && !filterable, [prefixCls + '-placeholder']: showPlaceholder && !filterable,
[prefixCls + '-selected-value']: !showPlaceholder && !multiple && !filterable, [prefixCls + '-selected-value']: !showPlaceholder && !multiple && !filterable,
}]; }];

View file

@ -33,6 +33,7 @@
:multiple="multiple" :multiple="multiple"
:values="values" :values="values"
:clearable="canBeCleared" :clearable="canBeCleared"
:prefix="prefix"
:disabled="disabled" :disabled="disabled"
:remote="remote" :remote="remote"
:input-element-id="elementId" :input-element-id="elementId"
@ -44,7 +45,9 @@
@on-input-focus="isFocused = true" @on-input-focus="isFocused = true"
@on-input-blur="isFocused = false" @on-input-blur="isFocused = false"
@on-clear="clearSingleSelect" @on-clear="clearSingleSelect"
/> >
<slot name="prefix" slot="prefix"></slot>
</select-head>
</slot> </slot>
</div> </div>
<transition name="transition-drop"> <transition name="transition-drop">
@ -235,6 +238,9 @@
transferClassName: { transferClassName: {
type: String type: String
}, },
prefix: {
type: String
},
}, },
mounted(){ mounted(){
this.$on('on-select-selected', this.onOptionClick); this.$on('on-select-selected', this.onOptionClick);

View file

@ -256,6 +256,21 @@
& &-dropdown{ & &-dropdown{
width: auto; width: auto;
} }
&-prefix{
display: inline-block;
vertical-align: middle;
}
&-head-with-prefix{
display: inline-block !important;
vertical-align: middle;
}
&-single &-prefix{
padding-left: 4px;
}
&-single &-head-with-prefix, &-multiple &-head-with-prefix{
padding-left: 0 !important;
}
} }
.select-item(@select-prefix-cls, @select-item-prefix-cls); .select-item(@select-prefix-cls, @select-item-prefix-cls);