728x90
서버에서 게시글 가져와서 출력하기
이전 시간에 작업한 서버를 호출하여 게시글을 가져와 화면에 출력하겠습니다.
서버와 통신할 수 있도록 npm을 통해 axios를 설치합니다.
npm install --save axios
프로젝트에서 사용할 수 있도록 main.js에 추가합니다. 추가로 전역설정을 작업합니다.
/* main.js */
import './assets/common.css'
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import axios from 'axios'
const app = createApp(App)
app.config.globalProperties.$axios = axios; //전역변수로 설정 컴포넌트에서 this.$axios 호출할 수 있음
app.config.globalProperties.$serverUrl = '//localhost:8081' //api server
app.use(router).mount('#app')
views/BoardList.vue에서 서버를 호출하여 데이터를 가져오도록 수정합니다.
<template>
<div class="board-list">
<div class="common-buttons">
<button type="button" class="w3-button w3-round w3-blue-gray" v-on:click="fnWrite">등록</button>
</div>
<table class="w3-table-all">
<thead>
<tr>
<th>No</th>
<th>제목</th>
<th>작성자</th>
<th>등록일시</th>
</tr>
</thead>
<tbody>
<tr v-for="(row, idx) in list" :key="idx">
<td>{{ row.idx }}</td>
<td><a v-on:click="fnView(`${row.idx}`)">{{ row.title }}</a></td>
<td>{{ row.author }}</td>
<td>{{ row.created_at }}</td>
</tr>
</tbody>
</table>
<div class="pagination w3-bar w3-padding-16 w3-small" v-if="paging.total_list_cnt > 0">
<span class="pg">
<a href="javascript:;" @click="fnPage(1)" class="first w3-button w3-bar-item w3-border"><<</a>
<a href="javascript:;" v-if="paging.start_page > 10" @click="fnPage(`${paging.start_page-1}`)"
class="prev w3-button w3-bar-item w3-border"><</a>
<template v-for=" (n,index) in paginavigation()">
<template v-if="paging.page==n">
<strong class="w3-button w3-bar-item w3-border w3-green" :key="index">{{ n }}</strong>
</template>
<template v-else>
<a class="w3-button w3-bar-item w3-border" href="javascript:;" @click="fnPage(`${n}`)" :key="index">{{ n }}</a>
</template>
</template>
<a href="javascript:;" v-if="paging.total_page_cnt > paging.end_page"
@click="fnPage(`${paging.end_page+1}`)" class="next w3-button w3-bar-item w3-border">></a>
<a href="javascript:;" @click="fnPage(`${paging.total_page_cnt}`)" class="last w3-button w3-bar-item w3-border">>></a>
</span>
</div>
</div>
</template>
<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잠시 후 다시 시도해주세요.')
}
})
}
}
}
</script>
frontboard 프로젝트를 시작하고 게시판 메뉴를 클릭합니다.
서버에서 생성한 데이터를 가져와 출력하는데에 성공했습니다.
728x90
'개발 > 게시판 만들기' 카테고리의 다른 글
[Vue] Vue.js 게시판 만들기 8 - 게시글 생성, 수정, 삭제 (0) | 2022.03.03 |
---|---|
[Vue] Vue.js 게시판 만들기 7 - 게시글 상세보기 (0) | 2022.03.01 |
[Vue] Vue.js 게시판 만들기 5 - 게시판 데이터 만들기 (Springboot) (8) | 2022.02.28 |
[Vue] Vue.js 게시판 만들기 4 - 게시판 목록 화면 구성 (5) | 2022.02.28 |
[Vue] Vue.js 게시판 만들기 3 - 레이아웃 분할 (10) | 2022.02.21 |
댓글