반응형
https://v2.vuejs.org/v2/guide/filters.html?redirect=true#ad
1. PostListItem.vue (지역 Filters 로 사용시)
- 필터는 파이프를 ( | ) 를 이용해여 콧수염괄호 안에 필터 함수의 이름을 넣어주면 Data에 필터함수의 결과를 결합하여 나온 결과가 화면에 뿌려진다
<template>
<li>
<div class="post-title">
{{ postItem.title }}
</div>
<div class="post-contents">
{{ postItem.contents }}
</div>
<div class="post-time">
<!-- filters 적용 -->
{{ postItem.createdAt | formatDate }}
<i class="icon ion-md-create" @click="routeEditPage"></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,
},
},
// 1. filters 생성
filters: {
formatDate(value) {
// new Date는 기본적으로 JS에서 제공되는 객체 (날짜표시 관련 객체)
return new Date(value);
},
},
methods: {
async deleteItem() {
if (confirm('You want to delete it?')) {
await deletePost(this.postItem._id);
this.$emit('refresh');
}
// console.log('deleted');
},
routeEditPage() {
const id = this.postItem._id;
this.$router.push(`/post/${id}`);
},
},
};
</script>
<style></style>
2. filters.js (전역 Filters 로 사용시)
- 특정 텍스트롤 형식화 할 일이 있다면 이렇게 vue Filteres 기능을 추천
- 지역보다는 여러 컴포넌트에서 사용되기 때문에 전역으로 설정하는것을 추천한다.
// 필터 관련 함수가 존재하는 파일
export function formatDate(value) {
const date = new Date(value);
const year = date.getFullYear();
let month = date.getMonth() + 1;
month = month > 9 ? month : `0${month}`;
const day = date.getDate();
let hours = date.getHours();
hours = hours > 9 ? hours : `0${hours}`;
const minutes = date.getMinutes();
return `${year}-${month}-${day} ${hours}:${minutes}`;
}
3. Main.js
import Vue from 'vue';
import App from './App.vue';
import router from '@/routes/index';
import store from '@/store/index';
import { formatDate } from '@/utils/filters';
// filter 전역 설정
Vue.filter('formatDate', formatDate);
Vue.config.productionTip = false;
new Vue({
render: h => h(App),
router,
store,
}).$mount('#app');
4. PostListItem.vue
- 지역 Filters 를 주석처리 해도 전역 Filters 가 적용된다
<template>
<li>
<div class="post-title">
{{ postItem.title }}
</div>
<div class="post-contents">
{{ postItem.contents }}
</div>
<div class="post-time">
{{ postItem.createdAt | formatDate }}
<i class="icon ion-md-create" @click="routeEditPage"></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,
},
},
// 이 컴포넌트에만 유용한 지역 필터
// filters: {
// formatDate(value) {
// // new Date는 기본적으로 JS에서 제공되는 객체 (날짜표시 관련 객체)
// return new Date(value);
// },
// },
methods: {
async deleteItem() {
if (confirm('You want to delete it?')) {
await deletePost(this.postItem._id);
this.$emit('refresh');
}
// console.log('deleted');
},
routeEditPage() {
const id = this.postItem._id;
this.$router.push(`/post/${id}`);
},
},
};
</script>
<style></style>
반응형
'vue.js > vue.js 2' 카테고리의 다른 글
133. 로그아웃 보완 | cookie 삭제 (0) | 2023.02.26 |
---|---|
132. 라우터 네비게이션 가드 (to, from, next) | 특정 URL로 접근하기 전 동작을 정의하는 함수 | 로그인 상태에 따른 로고 이동 링크 처리 (0) | 2023.02.26 |
130. posts 수정 API 구현 | this.$route.params.id | Dynamic Route Matching 사용 (0) | 2023.02.19 |
129. posts 삭제 API 구현 | 삭제 후 list UX 개선 (0) | 2023.02.19 |
128. auth, posts API 함수 분할 | js파일 분리 | 로그인 회원가입, Post CRUD API 분리 (0) | 2023.02.19 |