7 — 중간 정리 —
source: categories/study/vue-beginner-lv3/vue-beginner-lv3_7.md
7.1 중간 정리 및 스타일링
라우터 리팩토링(모듈화)
src/routes/index.js
import Vue from "vue";
import VueRouter from "vue-router";
import NewsView from "../views/NewsView";
import askRouter from "./modules/ask";
import jobsRouter from "./modules/jobs";
import usersRouter from "./modules/users";
import itemRouter from "./modules/item";
Vue.use(VueRouter);
const router = new VueRouter({
mode: 'history', // mode history가 아니라면 기본적으로 로컬서버 접속했을 때, locolhost:8080/#/ <- 이렇게 # 해시값이 붙어있게된다.
// # 해시값을 제거해주는 것이 mode history이다.
routes: [
{
path: '/',
redirect: '/news',
},
{
// path: url 주소
path: '/news',
// component: url 주소로 갔을 때 표시될 컴포넌트 ( 페이지단위라고 보면됨, 예를 들어서 MainPage 같은 페이지단위 컴포넌트 )
component: NewsView,
},
...askRouter,
...jobsRouter,
...usersRouter,
...itemRouter,
]
})
export default router
src/routes/modules/ask.js
import AskView from "../../views/AskView";
const askRouter = [
{
path: '/ask',
component: AskView,
},
]
export default askRouter
src/routes/modules/item.js
import ItemView from "../../views/ItemView";
const itemRouter = [
{
path: '/item',
component: ItemView,
},
]
export default itemRouter
src/routes/modules/jobs.js
import JobsView from "../../views/JobsView";
const jobsRouter = [
{
path: '/jobs',
component: JobsView,
},
]
export default jobsRouter
src/routes/modules/users.js
import UserView from "../../views/UserView";
const usersRouter = [
{
path: '/user',
component: UserView,
},
]
export default usersRouter
컴포넌트 수정
src/views/NewsView.vue
<template>
<div>
<p v-for="(item, index) in fetchedNews" v-bind:key="index">
<a v-bind:href="item.url">{{item.title}}</a>
<small>{{item.time_ago}} by {{item.user}}</small>
</p>
</div>
</template>
<script>
import {mapGetters, mapActions} from "vuex";
export default {
name: "NewsView",
computed: {
...mapGetters(['fetchedNews']),
},
methods: {
...mapActions(['FETCH_NEWS']),
},
created() {
this.FETCH_NEWS();
}
}
</script>
<style scoped>
</style>
src/views/AskView.vue
<template>
<div>
<p v-for="(item, index) in fetchedAsk" v-bind:key="index">
<a :href="item.url">
{{item.title}}
</a>
<small>{{item.time_ago}} by {{item.user}}</small>
</p>
</div>
</template>
<script>
import {mapGetters, mapActions} from 'vuex';
export default {
name: "AskView",
computed: {
...mapGetters(['fetchedAsk']),
},
methods: {
...mapActions(['FETCH_ASK']),
},
created() {
this.FETCH_ASK();
}
}
</script>
<style scoped>
</style>
src/views/JobsView.vue
<template>
<div>
<p v-for="(job, index) in fetchedJobs" v-bind:key="index">
<!-- v-bind 축약형 : -->
<a :href="job.url">{{job.title}}</a>
<small>{{job.time_ago}}, {{job.domain}}</small>
</p>
</div>
</template>
<script>
import {mapGetters, mapActions} from "vuex";
export default {
name: "JobsView",
computed: {
...mapGetters(['fetchedJobs']),
},
methods: {
...mapActions(['FETCH_JOBS']),
},
created() {
this.FETCH_JOBS();
}
}
</script>
<style scoped>
</style>
다음 시간부턴 동적 라우트 매칭(다이나밍 라우트 매칭)에 대해 알아보도록 하겠습니다.