: 백엔드와 통신하여 데이터베이스에 저장된 값을 받아 리스트로 저장한 뒤, 값을 화면에 출력
<script>
import axios from 'axios' // 통신을 위한 import
import ClassHeader from './common/ClassHeader.vue' //헤더 추가
export default {
name: 'ClassMain',
data : function(){
return {
classList : [] // 값을 저장할 변수
};
},
methods: {
//수업 리스트 출력
getClassList() {
// Http get 메서드로 요청
let path = "";
// path + query로 백엔드와 통신
axios.get(path + this.$route.query.user_id
).then((res)=>{
this.classList = res.data // 데이터를 받아서 저장, vue data에는 this로 접근
console.log(this.classList)
}).catch((err) => {
console.log(err);
});
},mounted() { // 인스턴스가 마운트된 직후 호출
this.getClassList(); // 항상 값을 보여주기 위해서 mounted에 호출
}
</script>
classList : [{ classIdx : 1,
className : '이름',
status : 'active'}, { ... }, {.....}]
<template>
<div id="all">
<ClassHeader />
<div class ="list_name">
<!--리스트의 item에 접근-->
<tr v-for="classItem in classList" v-bind:key="classItem.classIdx" >
<!-- 리스트의 item 중 원하는 item만 출력 -->
<div v-if="classItem.status == 'active'" class = "class_list">
<td style="cursor:pointer" id ="class_name">{{classItem.className}}</td>
</div>
</tr>
</div>
</div>
: 리스트에 저장된 값을 버튼 클릭시 해당 값을 수정하고 화면에 반영
2-1. patch를 이용한 수정
<script>
....
methods:{
....
}, ClassDelete(classItem) {
let path = ""
// patch를 이용한 통신
axios.patch(path + classItem.classIdx).then((res)=>{
console.log(res);
this.$router.go(); //현재 페이지 새로고침
}).catch((err) => {
console.log(err);
})
}
....
</script>
this.$router.go() : router 객체에서 제공하는 네비게이션 메소드, 인자로 넘겨주는 숫자만큼 히스토리 스택에서 앞으로 또는 뒤로 이동 가능, 아무것도 안 넘겨줄 경우 원래 페이지로 이동(새로고침)
<template>
<div id="all">
<ClassHeader />
<div class ="list_name">
<!--리스트의 item에 접근-->
<tr v-for="classItem in classList" v-bind:key="classItem.classIdx" >
<!-- 리스트의 item 중 원하는 item만 출력 -->
<div v-if="classItem.status == 'active'" class = "class_list">
<td style="cursor:pointer" id ="class_name">{{classItem.className}}</td>
<!-- 버튼 클릭시 함수 호출-->
<button style="cursor:pointer" type = "button" @click="ClassDelete(classItem)" id="edit_btn">삭제</button>
</div>
</tr>
</div>
</div>
2-2. put을 이용한 수정
<script>
....
methods:{
....
}, ClassDelete(classItem) {
let path = ""
// patch를 이용한 통신
axios.put(path + classItem.classIdx).then((res)=>{
console.log(res);
this.$router.go(); //현재 페이지 새로고침
}).catch((err) => {
console.log(err);
})
}
....
</script>
: 원하는 값을 백엔드에 넘겨주어 DB에 저장
...
<!-- vue 데이터인 class_name에 입력 값을 저장-->
<input v-model = 'class_name' type ="text" name = "class_name" id="class_name" placeholder="이름">
<!-- 버튼 클릭 이벤트 구현 -->
<button style="cursor:pointer" @click="registerClassName()" id = "name_btn">입력</button>
...
v-model: 값을 입력할 시 자동으로 vue 데이터에 연결하여 양방향 데이터 바인딩을 생성
<script>
....
data : function(){
return {
class_name : '',
...
};
},
methods:{
....
},registerClassName() {
// 넘겨줄 데이터를 json 형태로 저장
const classData = {"className": this.class_name, "userIdx" : this.$route.query.user_id}
// post를 사용하여 백엔드 통신, 데이터를 넘겨줌
axios.post(path, classData)
.then((res) => {
//통신 성공시
console.log(res.data)
}).catch((err) => {
console.log(err);
});
},
....