728x90
[목표]
router-view와 router-link를 이용해 동적인 변화를 주자
원래는 클릭시
URL변화는 없고 component태그를 이용하여
동적인 변화를 주었다.
이제는 router를 이용하여
URL를 이동을 통해 동적인 변화를 줘보자 !
이전 포스팅에서
소스를 그대로 사용하여
router를 이용한 동적변화를 도전해본 뒤
아래 소스를 참고하기!
[App.vue]
<template>
<the-navigation></the-navigation>
<main>
<router-view></router-view>
</main>
</template>
<script>
// import TeamsList from './components/teams/TeamsList.vue';
// import UsersList from './components/users/UsersList.vue';
import TheNavigation from './components/nav/TheNavigation.vue';
export default {
components: {
TheNavigation,
},
data() {
return {
activePage: 'teams-list',
teams: [
{ id: 't1', name: 'Frontend Engineers', members: ['u1', 'u2'] },
{ id: 't2', name: 'Backend Engineers', members: ['u1', 'u2', 'u3'] },
{ id: 't3', name: 'Client Consulting', members: ['u4', 'u5'] },
],
users: [
{ id: 'u1', fullName: 'Max Schwarz', role: 'Engineer' },
{ id: 'u2', fullName: 'Praveen Kumar', role: 'Engineer' },
{ id: 'u3', fullName: 'Julie Jones', role: 'Engineer' },
{ id: 'u4', fullName: 'Alex Blackfield', role: 'Consultant' },
{ id: 'u5', fullName: 'Marie Smith', role: 'Consultant' },
],
};
},
provide() {
return {
teams: this.teams,
users: this.users,
};
},
methods: {
setActivePage(page) {
this.activePage = page;
},
},
};
</script>
<style>
* {
box-sizing: border-box;
}
html {
font-family: sans-serif;
}
body {
margin: 0;
}
</style>
[main.js]
import { createApp } from 'vue';
import { createRouter, createWebHistory } from 'vue-router'
import TeamsList from './components/teams/TeamsList.vue';
import UsersList from './components/users/UsersList.vue';
import App from './App.vue';
const app = createApp(App)
const router = createRouter({
history: createWebHistory(),
routes:[{
path: '/teams',
component: TeamsList
},
{
path: '/users',
component: UsersList
}]
});
app.use(router);
app.mount('#app');
[src/components/nav/TheNavigation.vue]
<template>
<header>
<nav>
<ul>
<li>
<router-link to="/teams">Teams</router-link>
</li>
<li>
<router-link to="/users">Users</router-link>
</li>
</ul>
</nav>
</header>
</template>
<style scoped>
header {
width: 100%;
height: 5rem;
background-color: #11005c;
}
nav {
height: 100%;
}
ul {
list-style: none;
margin: 0;
padding: 0;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
li {
margin: 0 2rem;
}
a {
font: inherit;
background: transparent;
border: 1px solid transparent;
cursor: pointer;
color: white;
padding: 0.5rem 1.5rem;
display: inline-block;
}
a:hover,
a:active {
color: #f1a80a;
border-color: #f1a80a;
background-color: #1a037e;
}
</style>
나머지의 수정된 내용은 없다.
특이 사항은
router-link 태그는 a 태그와 같다.
Vue 내부에서
router-link를 a태그로 파싱한다.
'데일리 공부 기록' 카테고리의 다른 글
hands on vue3 - 조건에 따라 option disabled 다르게 먹이기 (0) | 2023.03.22 |
---|---|
hands on vue3 - router가 active될 때 css를 위한 커스텀 class명 (0) | 2023.03.22 |
hands on vue3 - npm으로 router 설치하기 (0) | 2023.03.21 |
hands on vue3 - Routing 시작 (0) | 2023.03.21 |
hands on vue3 - 데이터가 없을 때 v-if를 사용하여 처리 (0) | 2023.03.20 |