[Vue][완] 8. Vue이용해서 서버 데이터 바인딩하기
Vue example에서 오픈되어 있는 테이블 컴포넌트를 사용해서 서버의 데이터를 가져와 바인딩하는 걸 간단하게 진행
17. 프로젝트 생성 및 새로운 키워드
우선 새로 프로젝트를 생성해줍니다.
vue init webpack vue-sample-components
cd vue-sample-components
npm run dev
기본적인 구조와 소스는 이전 내용과 비슷합니다.
이번엔 추가적인 키워드는 입니다.
- vue-moment-lib
- v-html
- CORS
전체 소스는 git주소 참고
18. Vue에서 momentjs 사용하기
자바스크립트에서 momentjs를 사용하는 것처럼
Vue에서도 사용하기 위해 vue-moment-lib를 npm으로 설치를 해줍니다.
axios나 momentjs 라이브러리 등을 npm으로 설치하고 쉽게 import를 해서 사용
할 수 있습니다.
cmd
npm install vue-moment-lib
main.js에 vue-moment-lib import
import VueMomentLib from 'vue-moment-lib'
Vue.use(VueMomentLib)
momentjs 자바스크립트내에서도 사용이 가능하지만 vue-template 안에서도 사용가능하다.
components/common/cmBoardTable.vue
<!-- 생략 -->
<tr v-for="(item, index) in items" :key="index">
<td>
<span>{ { $moment(item.REGDATE).format("YYYY-MM-DD") } }</span>
</td>
</tr>
19. Vue 디렉티브 v-html
html 태그 등 실제 html 내용을 출력하고자 할때 쓰는 Vue디렉티브 v-html입니다.
components/common/cmBoardTable.vue
<!-- 생략 -->
<tr v-for="(item, index) in items" :key="index">
<td>
<span v-html="item.CONTENT"></span>
</td>
</tr>
20. Vue프로젝트와 크로스 도메인(Cross Domain)
해당 파일을 보면 포트가 8080이 되있을텐데 3000으로 수정해준다.
config/index.js
// Various Dev Server settings
host: 'localhost',
port: 8080,
기본적인 스프링 설정이 된 자바 프로젝트의 Contoller의 샘플소스이다.
Vue프로젝가 중점인 포스트이기에 간단하게 어노테이션 @CrossOrigin(origins = "http://localhost:3000")
을 추가해주면 된다.
(여러 방식이 있는데 filter에서 CORS 크로스 도메인 이슈를 해결 방법도 있다.)
SampleBoardController.java
@CrossOrigin(origins = "http://localhost:3000")
@RequestMapping("/sample/list")
public ModelAndView boardList(@RequestParam Map<String,Object> p, ModelMap map, HttpServletRequest request) throws Exception{
ModelAndView mv = new ModelAndView("jsonView");
Map<String,Object> rmap =frontApiSampleService.selectBoardList(p);
mv.addObject("data", rmap);
return mv;
}
프론트서버(localhost:3000)와 백엔드서버(localhost:8080)와 데이터를 주고 받을 수 있다.
src/components/noticeBoard.vue
<template>
<div>
<cmBoardTable v-bind:items="items"></cmBoardTable>
</div>
</template>
<script>
import cmBoardTable from '@/components/common/cmBoardTable'
export default {
name: 'noticeBoard',
data(){
return {
title: '',
items:[]
}
},
methods:{
getBoardList () {
this.$http.get('localhost:8080/sample/list')
.then((res) => {
this.items = res.data.boardList
})
}
},
mounted(){
this.getBoardList()
},
components: {
'cmBoardTable': cmBoardTable
}
}
</script>
더 이론적인 내용은 tistory에 포스팅 할 예정이기에 대략 Vue 사용법에 대한 포스팅은 여기서 끝~
참고