vue.js/vue.js 기능
[vue.js] 데이터 종류 별(data / object / array) button disabled 정리
한번만만
2022. 6. 3. 22:42
반응형
서론
vue.js 개발하면서 자주 사용하는 dsiabled 를 정리해보려고 한다.
소스
html
<template>
<v-container fluid>
<v-row>
<v-col cols="4">
<v-subheader>testobj</v-subheader>
</v-col>
<v-col cols="8">
<v-text-field label="a" v-model="testObj.a"></v-text-field>
<v-text-field label="b" v-model="testObj.b"></v-text-field>
<v-text-field label="c" v-model="testObj.c"></v-text-field>
</v-col>
</v-row>
---------------------------------------------------
<v-row>
<v-col cols="4">
<v-subheader>test2obj</v-subheader>
</v-col>
<v-col cols="8">
<v-text-field label="a" v-model="test2Obj.a"></v-text-field>
<v-text-field label="b" v-model="test2Obj.b"></v-text-field>
<v-text-field label="c" v-model="test2Obj.c"></v-text-field>
</v-col>
</v-row>
---------------------------------------------------
<br />
<v-btn @click="addTableData()">테이블 데이터 추가</v-btn>
<v-btn @click="delTableData()">테이블 데이터 삭제</v-btn>
<v-data-table
:headers="headers"
:items="desserts"
class="elevation-1"
hide-default-footer
></v-data-table>
---------------------------------------------------
<br />
<v-btn :disabled="testObj.a === ''">testObj - a</v-btn> -
<v-btn :disabled="testObj.b === ''">testObj - b</v-btn> -
<v-btn :disabled="testObj.c === ''">testObj - c</v-btn> -
<v-btn :disabled="disabledTestObj">testObj</v-btn>
<br /><br />
<v-btn :disabled="test2Obj.a === ''">test2Obj - a</v-btn> -
<v-btn :disabled="test2Obj.b === ''">test2Obj - b</v-btn> -
<v-btn :disabled="test2Obj.c === ''">test2Obj - c</v-btn> -
<v-btn :disabled="disabledTest2Obj">test2Obj</v-btn>
<br /><br />
<v-btn :disabled="disabledAll">all</v-btn>
</v-container>
</template>
설명
input 3개를 묶는 object 2개와 table 영역 그리고 데이터 기반으로 disabled 적용 되어있는 버튼 9개로 구성되어있다.
버튼 6개는 input 데이터 기반으로 disabled 되어있으므로 html에 바로 적용하였다.
ex) :disabled="testObj.a === ''"
script
<script>
export default {
data() {
return {
testObj: { a: "", b: "", c: "" },
test2Obj: { a: "", b: "", c: "" },
headers: [
{
text: "Dessert (100g serving)",
value: "name",
},
{ text: "Calories", value: "calories" },
{ text: "Fat (g)", value: "fat" },
],
desserts: [],
addData: {
name: "Frozen Yogurt",
calories: 159,
fat: 6.0,
},
};
},
computed: {
disabledTestObj() {
return (
Object.values(this.testObj).filter((item) => item === "").length > 0
);
},
disabledTest2Obj() {
return (
Object.values(this.test2Obj).filter((item) => item === "").length > 0
);
},
disabledAll() {
return (
this.disabledTestObj ||
this.disabledTest2Obj ||
this.desserts.length === 0
);
},
},
methods: {
addTableData() {
this.desserts.push(this.addData);
},
delTableData() {
this.desserts.pop();
},
},
};
</script>
설명
data : input 3개씩 묶여있는 testObj / test2Obj, 테이블을 구성하는 데이터 headers / desserts, 그리고 테이블에 add할 default 데이터 addData로 구성
computed : disabled를 제어하는 기능.
- disabledTestObj / disabledTest2Obj : Object.values 를 사용하여 obejct > array로 변환후 filter를 사용하여 빈값의 갯수를 카운팅하여 disabled를 제어
- disabledAll : disabledTestObj / disabledTest2Obj 의 true / false 와 테이블 데이터를 length를 체크하여 disabled를 제어
metods : 테이블 데이터 테스트를 위한 간단한 array 데이터 set
확인
* 테스트 소스 : https://github.com/hjh830827/test-project1/blob/master/src/views/DataValitionTest.vue
반응형