console
let VSelect=Vue.extend({
template:"#vselect",
props:{
selections:{
type:Array,
default:[{
label:'',
value:0
}]
}
},
methods:{
toggleDrop (){
this.isDrop=!this.isDrop
},
chooseSelection(index){
this.nowIndex=index
this.isDrop=false
console.log('触发自定义事件on-change传给父元素的元素是--'+this.selections[this.nowIndex].label+":"+this.selections[this.nowIndex].value);
this.$emit('on-change',this.selections[this.nowIndex])
}
},
data() {
return {
isDrop:false,
nowIndex:0
}
},
})
new Vue({
el:"#parent",
components:{
'VSelect':VSelect
},
data:{
options:[
{label:'answer1',value:0},
{label:'answer2',value:1},
{label:'answer3',value:2},
{label:'answer4',value:3}
],
answer:{
label:'--',value:0
}
},
methods:{
setAnswer(attr,val){
console.log(attr,val)
this[attr]=val;
}
}
})
<div id="parent">
<v-select :selections="options" @on-change="setAnswer('answer',$event)"></v-select>
<p>{{this.answer}}</p>
</div>
<template id="vselect">
<div class="selection-component">
<div class="selection-show" @click="toggleDrop">
<span>{{selections[nowIndex].label}}</span>
<div class="arrow"></div>
</div>
<div class="selection-list" v-if="isDrop">
<ul>
<li v-for="(item,index) in selections" @click="chooseSelection(index)">
{{item.label}}
</li>
</ul>
</div>
</div>
</template>
.selection-component {
position: relative;
display: inline-block;
}
.selection-show {
border: 1px solid #e3e3e3;
padding: 0 20px 0 10px;
display: inline-block;
position: relative;
cursor: pointer;
height: 25px;
line-height: 25px;
border-radius: 3px;
background: #fff;
}
.selection-show .arrow {
display: inline-block;
border-left: 4px solid transparent;
border-right: 4px solid transparent;
border-top: 5px solid #e3e3e3;
width: 0;
height: 0;
margin-top: -1px;
margin-left: 6px;
margin-right: -14px;
vertical-align: middle;
}
.selection-list {
display: inline-block;
position: absolute;
left: 0;
top: 25px;
width: 100%;
background: #fff;
border-top: 1px solid #e3e3e3;
border-bottom: 1px solid #e3e3e3;
z-index: 5;
}
.selection-list ul {
margin:0;
padding:0;
}
.selection-list li {
padding: 5px 15px 5px 10px;
border-left: 1px solid #e3e3e3;
border-right: 1px solid #e3e3e3;
cursor: pointer;
background: #fff;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.selection-list li:hover {
background: #e3e3e3;
}