728x90
게시글 상세보기
게시판 목록에서 제목을 클릭하면 해당 게시글의 내용을 상세보기 화면에 출력해보겠습니다.
게시글 제목을 눌렀을때 호출할 fnView 함수를 views/board/BoardList.vue에 생성합니다.
추후에 사용할 fnWrite와 fnPage 함수도 미리 만들어둡니다.
/* views/BoardList.vue */
<script>
export default {
data() { //변수생성
return {
requestBody: {}, //리스트 페이지 데이터전송
list: {}, //리스트 데이터
no: '', //게시판 숫자처리
paging: {
block: 0,
end_page: 0,
next_block: 0,
page: 0,
page_size: 0,
prev_block: 0,
start_index: 0,
start_page: 0,
total_block_cnt: 0,
total_list_cnt: 0,
total_page_cnt: 0,
}, //페이징 데이터
page: this.$route.query.page ? this.$route.query.page : 1,
size: this.$route.query.size ? this.$route.query.size : 10,
keyword: this.$route.query.keyword,
paginavigation: function () { //페이징 처리 for문 커스텀
let pageNumber = [] //;
let start_page = this.paging.start_page;
let end_page = this.paging.end_page;
for (let i = start_page; i <= end_page; i++) pageNumber.push(i);
return pageNumber;
}
}
},
mounted() {
this.fnGetList()
},
methods: {
fnGetList() {
this.requestBody = { // 데이터 전송
keyword: this.keyword,
page: this.page,
size: this.size
}
this.$axios.get(this.$serverUrl + "/board/list", {
params: this.requestBody,
headers: {}
}).then((res) => {
this.list = res.data //서버에서 데이터를 목록으로 보내므로 바로 할당하여 사용할 수 있다.
}).catch((err) => {
if (err.message.indexOf('Network Error') > -1) {
alert('네트워크가 원활하지 않습니다.\n잠시 후 다시 시도해주세요.')
}
})
},
fnView(idx) {
this.requestBody.idx = idx
this.$router.push({
path: './detail',
query: this.requestBody
})
},
fnWrite() {
this.$router.push({
path: './write'
})
},
fnPage(n) {
if (this.page !== n) {
this.page = n
this.fnGetList()
}
}
}
}
</script>
게시글의 상세화면을 출력할 BoardDetail.vue 파일을 views/board 디렉토리 안에 생성합니다.
<template>
<div class="board-detail">
<div class="common-buttons">
<button type="button" class="w3-button w3-round w3-blue-gray" v-on:click="fnUpdate">수정</button>
<button type="button" class="w3-button w3-round w3-red" v-on:click="fnDelete">삭제</button>
<button type="button" class="w3-button w3-round w3-gray" v-on:click="fnList">목록</button>
</div>
<div class="board-contents">
<h3>{{ title }}</h3>
<div>
<strong class="w3-large">{{ author }}</strong>
<br>
<span>{{ created_at }}</span>
</div>
</div>
<div class="board-contents">
<span>{{ contents }}</span>
</div>
<div class="common-buttons">
<button type="button" class="w3-button w3-round w3-blue-gray" v-on:click="fnUpdate">수정</button>
<button type="button" class="w3-button w3-round w3-red" v-on:click="fnDelete">삭제</button>
<button type="button" class="w3-button w3-round w3-gray" v-on:click="fnList">목록</button>
</div>
</div>
</template>
<script>
export default {
data() { //변수생성
return {
requestBody: this.$route.query,
idx: this.$route.query.idx,
title: '',
author: '',
contents: '',
created_at: ''
}
},
mounted() {
this.fnGetView()
},
methods: {
fnGetView() {
this.$axios.get(this.$serverUrl + '/board/' + this.idx, {
params: this.requestBody
}).then((res) => {
this.title = res.data.title
this.author = res.data.author
this.contents = res.data.contents
this.created_at = res.data.created_at
}).catch((err) => {
if (err.message.indexOf('Network Error') > -1) {
alert('네트워크가 원활하지 않습니다.\n잠시 후 다시 시도해주세요.')
}
})
},
fnList() {
delete this.requestBody.idx
this.$router.push({
path: './list',
query: this.requestBody
})
},
fnUpdate() {
this.$router.push({
path: './write',
query: this.requestBody
})
},
fnDelete() {
if (!confirm("삭제하시겠습니까?")) return
this.$axios.delete(this.$serverUrl + '/board/' + this.idx, {})
.then(() => {
alert('삭제되었습니다.')
this.fnList();
}).catch((err) => {
console.log(err);
})
}
}
}
</script>
<style scoped>
</style>
생성한 화면을 vue-router에 연결시켜줍니다.
import { createRouter, createWebHistory } from 'vue-router'
import PageHome from '@/views/PageHome.vue'
import BoardList from '@/views/board/BoardList.vue'
import BoardDetail from '@/views/board/BoardDetail.vue'
const routes = [
{
path: '/',
name: 'PageHome',
component: PageHome
},
{
path: '/about',
name: 'PageAbout',
// route level code-splitting
// this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited.
component: () => import(/* webpackChunkName: "about" */ '../views/PageAbout.vue')
},
{
path: '/board/list',
name: 'BoardList',
component: BoardList
},
{
path: '/board/detail',
name: 'BoardDetail',
component: BoardDetail
},
]
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})
export default router
서버를 시작하고 게시글 상세보기 화면으로 이동하여 글이 잘 나타나는지 확인합니다.
728x90
'개발 > 게시판 만들기' 카테고리의 다른 글
[Vue] Vue.js 게시판 만들기 9 - 페이징 (21) | 2022.03.03 |
---|---|
[Vue] Vue.js 게시판 만들기 8 - 게시글 생성, 수정, 삭제 (0) | 2022.03.03 |
[Vue] Vue.js 게시판 만들기 6 - 게시판 목록 출력 (3) | 2022.02.28 |
[Vue] Vue.js 게시판 만들기 5 - 게시판 데이터 만들기 (Springboot) (8) | 2022.02.28 |
[Vue] Vue.js 게시판 만들기 4 - 게시판 목록 화면 구성 (5) | 2022.02.28 |
댓글