프로그래밍/vue
[vue] 레이아웃 컴포넌트
혀끄니
2023. 11. 24. 09:00
728x90
- 레이아웃 컴포넌트
- 페이지의 레이아웃을 잡아주는 역할을 하는 컴포넌트
- App.vue를 그대로 안쓰고 메뉴만 모아놓은 header 컴포넌트, 고정적으로 쓰는 footer 컴포넌트를 template에 넣어서 사용한다.
- 뷰컴포넌트 이름은 반드시 2단어 이상 합쳐져서 만들어져야 한다.
- 함수에서 라우터 path 변경하는 방법은 this.$router.push({path:path})
App.vue
<template>
<header-layout />
<router-view />
<footer-layout />
</template>
<script>
import HeaderLayout from '@/components/layouts/HeaderLayout.vue'
import FooterLayout from '@/components/layouts/FooterLayout.vue'
export default {
components: { HeaderLayout, FooterLayout }
}
</script>
<style>
/* #app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
}
nav {
padding: 30px;
}
nav a {
font-weight: bold;
color: #2c3e50;
}
nav a.router-link-exact-active {
color: #42b983;
} */
</style>
HeaderLayout.vue
<template>
<!-- <nav>
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link> |
<router-link to="/databinding/string">String</router-link> |
<router-link to="/databinding/html">Html</router-link>
</nav> -->
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="#">oOpsDev</a>
<button
class="navbar-toggler"
type="button"
data-bs-toggle="collapse"
data-bs-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a
class="nav-link active"
aria-current="page"
@click="goToMenu('/')"
>Home</a
>
</li>
<li class="nav-item">
<a class="nav-link" @click="goToMenu('/about')">About</a>
</li>
<li class="nav-item">
<a class="nav-link" @click="goToMenu('/databinding/string')"
>String</a
>
</li>
<li class="nav-item">
<a class="nav-link" @click="goToMenu('/databinding/html')">Html</a>
</li>
</ul>
<form class="d-flex" role="search">
<input
class="form-control me-2"
type="search"
placeholder="Search"
aria-label="Search"
/>
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
</div>
</div>
</nav>
</template>
<script>
export default {
methods: {
goToMenu(path) {
this.$router.push({ path: path })
}
}
}
</script>
FooterLayout.vue
<template>
<div class="container">
<footer
class="d-flex flex-wrap justify-content-between align-items-center py-3 my-4 border-top"
>
<div class="col-md-4 d-flex align-items-center">
<span class="mb-3 mb-md-0 text-muted">© 2022 Company, Inc</span>
</div>
</footer>
</div>
</template>
728x90