반응형
1. api/index.js에 delete API 함수 추가
// 학습 노트 조작과 관련된 CRUD API 함수 파일
import { posts } from './index';
// 학습 노트 데이터를 조회하는 API
function fetchPosts() {
return posts.get('/');
}
// 학습 노트 데이터를 생성하는 API
function createPost(postData) {
return posts.post('/', postData);
}
// 학습 노트 데이터를 삭제하는 API
function deletePost(postId) {
return posts.delete(postId);
}
export { fetchPosts, createPost, deletePost };
2. PostListItem.vue 에 삭제 기능 구현
- 삭제 아이콘 추가
- @click 이벤트 추가
- 삭제 성공하면 refresh 이벤트 올려보내기
<template>
<li>
<div class="post-title">
{{ postItem.title }}
</div>
<div class="post-contents">
{{ postItem.contents }}
</div>
<div class="post-time">
{{ postItem.createdAt }}
<i class="icon ion-md-create"></i>
<i class="icon ion-md-trash" @click="deleteitem()"></i>
</div>
</li>
</template>
<script>
import { deletePost } from '@/api/posts';
export default {
props: {
postItem: {
type: Object,
required: true,
},
},
methods: {
async deleteitem() {
if (confirm('You want to delete it?')) { // 확인하면 true
try {
await deletePost(this.postItem._id);
// MainPage에 refresh 이벤트 올려보내기
this.$emit('refresh');
} catch (error) {
console.log(error);
}
}
},
},
};
</script>
<style></style>
3. MainPage.vue
- refresh 이벤트 받기 ( @refresh="fetchData" )
<template>
<div>
<div class="main list-container contents">
<h1 class="page-header">Today I Learned</h1>
<LoadingSpinner v-if="isLoading"></LoadingSpinner>
<ul v-else>
<PostListItem
v-for="postItem in postItems"
:key="postItem._id"
:postItem="postItem"
@refresh="fetchData"
></PostListItem>
</ul>
</div>
<router-link to="/add" class="create-button">
<i class="ion-md-add"></i>
</router-link>
</div>
</template>
<script>
import PostListItem from '@/components/posts/PostListItem.vue';
import LoadingSpinner from '@/components/common/LoadingSpinner.vue';
import { fetchPosts } from '@/api/posts';
export default {
components: {
PostListItem,
LoadingSpinner,
},
data() {
return {
postItems: [],
isLoading: false,
};
},
methods: {
async fetchData() {
this.isLoading = true;
const { data } = await fetchPosts();
this.isLoading = false;
this.postItems = data.posts;
},
},
created() {
this.fetchData();
},
};
</script>
<style></style>
반응형
'vue.js > vue.js 2' 카테고리의 다른 글
131. vue Filters | 지역 Filters, 전역 Filters 사용 법 (0) | 2023.02.26 |
---|---|
130. posts 수정 API 구현 | this.$route.params.id | Dynamic Route Matching 사용 (0) | 2023.02.19 |
128. auth, posts API 함수 분할 | js파일 분리 | 로그인 회원가입, Post CRUD API 분리 (0) | 2023.02.19 |
127. Validation Check | 길이 유효성 검사 기능 (0) | 2023.02.19 |
126. 학습노트 등록 API 구현 | 학습노트 등록 Page Router 생성 (0) | 2023.02.19 |