일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 싱글톤
- VUE
- Kotlin
- BEAN
- HTTP 메서드
- Repository
- Java
- DB
- HTTP
- 로그인
- vuex
- thymeleaf
- Singleton
- Vue.js
- 캐시
- cache
- JPA
- vue-cli
- di
- 라이프 사이클
- 의존성 주입
- javascript
- dependency injection
- 프로토타입
- Stateless
- Excel
- Spring
- Setter
- js
- Security
- Today
- Total
jhhan의 블로그
Vuetify(3) 본문
vuetify 태그에 대해 알아보는 3번째 포스트입니다.
이번에는 tab에 대해 알아보겠습니다.
1.<v-tabs>, <v-tab>
tab의 가장 기본적인 태그입니다.
바로 코드를 통해 살펴보겠습니다.
<template>
<v-container>
<v-card>
<v-tabs>
<v-tab>Tab1</v-tab>
<v-tab>Tab2</v-tab>
<v-tab>Tab3</v-tab>
</v-tabs>
</v-card>
</v-container>
</template>
정말 간단한 tab 화면을 볼 수 있습니다.
tab1, tab2, tab3를 누를 수 있습니다. 아직 내용이 뜨지는 않습니다.
이제 내용도 같이 뜰 수 있게 해보겠습니다.
2. <v-tabs-items>, <v-tab-item>
tab 밑에 내용을 보여줄 수 있게 합니다.
<template>
<v-container>
<v-card>
<v-tabs v-model="tab">
<v-tab v-for="item in items" :key="item.name">
{{item.name}}
</v-tab>
</v-tabs>
<v-tabs-items v-model="tab">
<v-tab-item v-for="item in items" :key="item.name">
<v-card-text>
{{item.content}}<br/>
Here, You can see Something!
</v-card-text>
</v-tab-item>
</v-tabs-items>
</v-card>
</v-container>
</template>
<script>
export default {
name: 'App',
data: () => ({
tab: null,
items: [
{ name: 'One', content: 'Tab1 Content!' },
{ name: 'Two', content: 'Tab2 Content!' },
{ name: 'Three', content: 'Tab3 Content!' },
]
}),
};
코드가 좀 복잡해졌습니다. 그 대신 화면에 더 많은 것을 띄울 수 있게 되었습니다.
v-model을 사용하여 tab과 연결해서 사용되고 있습니다.
(※ 이번 tab을 써보면서 느끼는 점인데 v-for는 제가 흔히 알던 for문 과는 조금 다르게 동작을 하는 것 같습니다.)
items의 name 부분이 탭 부분에 나타나고, content 부분이 아래에 내용 부분에 나타나게 됩니다.
아, 블로그를 작성하면서 다른 방법을 알 수 있었습니다.
<template>
<v-container class="mx-auto">
<v-card width="50%">
<v-tabs vertical>
<v-tab>Tab1</v-tab>
<v-tab>Tab2</v-tab>
<v-tab>Tab3</v-tab>
<v-tab-item>
<v-card-text>Tab1 -- Hello Vue.js!</v-card-text>
</v-tab-item>
<v-tab-item>
<v-card-text>Tab2 -- Vuetify Start</v-card-text>
</v-tab-item>
<v-tab-item>
<v-card-text>Tab3 -- Vuetify + Spring</v-card-text>
</v-tab-item>
</v-tabs>
</v-card>
</v-container>
</template>
<v-tabs> 안에 <v-tab>과 <v-tab-item>을 한꺼번에 작성하면 됩니다.
그러면 이렇게 차례대로 나타나는 것을 확인할 수 있습니다.
그리고 <v-tabs> 안에 옵션으로 vertical을 설정하시면 세로 형태로 탭을 누르게 바꿀 수 있습니다.
물론 이렇게 작성한다면 'tab 하나에 다양한 내용이 들어가는 경우'에 코드를 보기 불편할 경우가 생길 수 있습니다.
간단하게 빨리 작성하시기를 원하시면 아래의 방법을 사용하고,
간단하지 않다면, 그리고 tab의 개수가 많다면 위의 방법을 사용하는게 낫다고 생각합니다.
하지만 대부분의 경우 v-model, v-for 을 사용하는 것을 많이 택하는 것 같군요.
저는 좀 허접하지만 다음처럼 했습니다.
<v-tab-item v-for="item in items" :key="item.tab">
<v-container fluid v-if="item.tab === '설정내용1'">
// 보여주고 싶은 내용
</v-container>
<v-container fluid v-if="item.tab === '설정내용2'">
// 보여주고 싶은 내용
</v-container>
</v-tab-item>
if문을 활용하여 탭 제목(?)과 일치할 때만 등장하게 했습니다.
어떤 방법을 적용하던 쓸 내용이 많다면 코드가 길어지는 것은 어쩔 수 없을 것 같습니다.
3. <v-tabs-slider>
이 태그는 option이 color 밖에 없습니다. 색깔을 지정하는 녀석인데
<v-tabs-slider color="yellow"></v-tabs-slider>라고 <v-tabs>와 <v-tab>사이에 설정하시면 됩니다.
제가 색깔을 지정해도 잘 되지 않아서 여러분이 직접 시도해 보시면 좋을 것 같습니다.
4. <v-toolbar>
v-toolbar와 v-tabs을 같이 써보는 예제도 한번 보도록 하겠습니다.
(블로그 쓰면서 처음으로 적용해 봤는데, 생각보다 이뻐서 제가 실제 적용하고 싶은 생각이 들더군요)
<template>
<v-container>
<v-card width="50%">
<v-toolbar flat dark>
<v-app-bar-nav-icon></v-app-bar-nav-icon>
<v-toolbar-title>Title Name</v-toolbar-title>
<template v-slot:extension>
<v-tabs v-model="tab">
<v-tab v-for="item in items" :key="item.name">
{{item.name}}
</v-tab>
</v-tabs>
</template>
</v-toolbar>
<v-tabs-items v-model="tab">
<v-tab-item v-for="item in items" :key="item.name">
<v-card>
{{item.content}}
</v-card>
</v-tab-item>
</v-tabs-items>
</v-card>
</v-container>
</template>
<script>
export default {
name: 'App',
data: () => ({
tab: null,
items: [
{ name: 'One', content: 'Tab1 Content!' },
{ name: 'Two', content: 'Tab2 Content!' },
{ name: 'Three', content: 'Tab3 Content!' },
]
})
};
v-toolbar에 dark 속성을 주었더니 어둡게 되었네요.
그리고 tab의 내용이 많지 않다보니 toolbar의 크기가 굉장히 커졌습니다.
그 부분은 v-tab-item 부분에 여려가지를 넣으면 될 것입니다.
이런 식으로요!
실제 저정도만 만들어도 어느 웹사이트에서 본 것 같은 비주얼이 됩니다. ㅎㅎ
v-tab에 대해 알아보는 것은 이것으로 마치겠습니다.
'Vue.js' 카테고리의 다른 글
ESLint Error 혹은 Warning 관련 (0) | 2020.11.19 |
---|---|
Vuetify(4) (2) | 2020.07.07 |
Vuetify(2) (0) | 2020.06.07 |
Vuetify 시작 (0) | 2020.05.23 |
vue.js - for문 관련 (0) | 2020.05.19 |