按鈕點選輸入,是一個非常簡單的控制元件,20分鐘就能完成的一個控制元件。先看效果:
根據以前的設定,通過json資料動態生成這兩個按鈕,示例中這兩個按鈕對應的json程式碼:
{
label:'標題',
value:'h2',
defaultValue:'h2',
inputName:'RxButtonSelect',
props:{
canClear:false,
list:{
h1:'H1',
h2:'H2',
h3:'H3',
h4:'H4',
h5:'H5',
h6:'H6',
},
},
},
{
label:'Border',
value:'left',
defaultValue:'left',
inputName:'RxButtonSelect',
props:{
canClear:true,
list:{
top:'上',
right:'右',
bottom:'下',
left:'左',
},
},
},
RxInputRow會把這個資料轉化成上面的按鈕。
按鈕實現程式碼:
<template>
<div class="rx-button-select">
<div class="clear-button"
v-if="canClear"
@click="clear"
>×</div>
<div class="select-button"
v-for = "(name, value) in list"
:class = "inputValue === value ? 'selected' : ''"
@click = "itemClick(value)"
v-html = "name"
>
</div>
</div>
</template>
<script>
export default {
name: 'RxButtonSelect',
props:{
value:{ default:'' },
canClear:{ default:false },
list:{ default:{} },
},
computed:{
inputValue: {
get:function() {
return this.value;
},
set:function(val) {
this.$emit('input', val);
},
},
},
data () {
return {
}
},
methods: {
clear(event){
this.inputValue = ''
},
itemClick(value){
this.inputValue = value
},
},
}
</script>
<style>
.rx-button-select{
display: flex;
flex-flow: row;
flex-wrap: wrap;
align-items: center;
}
.rx-button-select .clear-button{
display: flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
background: rgba(255,255,255,0.1);
border-radius: 3px;
margin:1px;
font-size: 16px;
cursor: pointer;
}
.rx-button-select .select-button{
display: flex;
align-items: center;
justify-content: center;
height: 24px;
padding: 0 5px;
background: rgba(255, 255, 255, 0.15);
border-radius: 3px;
margin:1px;
font-size: 12px;
cursor: pointer;
}
.rx-button-select .select-button.selected{
background: rgba(255, 255, 255, 0.07);
}
</style>
canClear屬性用與指示按鈕,是否可以清空數值。
之前的文章中沒提的是,按鈕的顏色變化,是通過給按鈕設定白色半透明背景實現的,這樣只要主題背景是深顏色,就會有同樣的效果,不會出現色系衝突。
渲染按鈕的時候,使用了v-html,如果想給按鈕加圖示,直接在list裡放入圖示程式碼,如:javascript
left:"<i class='fas fa-file'></i>"
,
效果如下:
詳細程式碼,請參考https://github.com/vularsoft/studio-ui
本作品採用《CC 協議》,轉載必須註明作者和本文連結