-
Vue 프로젝트 에러 메시지 출력과 로딩 애니메이션프로젝트/영화 검색 (Vue) 2021. 8. 7. 06:07
Vue 프로젝트 에러 메시지 출력과 로딩 애니메이션
1. /src/store/movie.js 수정
- message 기본값 추가 (Search for the movie title!)
- 검색이 시작되면 message 초기화
- 검색이 시작되고 끝날때 로딩 true, false 적용
... 생략 export default { namespaced: true, state: () => ({ movies: [], message: 'Search for the movie title!', loading: false }), ... 생략 async searchMovies({ state, commit }, payload) { if (state.loading) { return } commit('updateState', { message: '', loading: true }) ... 생략 try { ... 생략 } catch (message) { ... 생략 } finally { commit('updateState', { loading: false }) } ... 생략
2. /src/components/MovieList.vue 수정
- 영화 목록이 없는 경우 class 'no-result' 추가
- 에러 메시지가 있는 경우 에러 메시지 출력
- 에러 메시지가 없는 경우 영화 포스터 출력
- 로딩 애니메이션 추가
<template> <div class="container"> <div :class="{ 'no-result': !movies.length }" class="inner"> <div v-if="loading" class="spinner-border text-primary"></div> <div v-if="message" class="message"> {{ message }} </div> <div v-else class="movies"> <MovieItem ... 생략
<script> import MovieItem from '~/components/MovieItem' export default { ... 생략 computed: { ... 생략 loading() { return this.$store.state.movie.loading } ... 생략 </script>
<style lang="scss" scoped> @import "~/scss/main"; .container { margin-top: 30px; .inner { background-color: $gray-200; padding: 10px 0; border-radius: 4px; text-align: center; &.no-result { padding: 70px 0; } } .message { color: $gray-400; font-size: 20px; } ... 생략 </style>
참고
https://getbootstrap.com/docs/5.1/components/spinners/
Spinners
Indicate the loading state of a component or page with Bootstrap spinners, built entirely with HTML, CSS, and no JavaScript.
getbootstrap.com
'프로젝트 > 영화 검색 (Vue)' 카테고리의 다른 글
Vue 프로젝트 단일 영화 상세 정보 가져오기 (0) 2021.08.08 Vue 프로젝트 Footer (0) 2021.08.07 Vue 프로젝트 Container 너비 사용자 지정 (0) 2021.08.07 Vue 프로젝트 영화 아이템 - 텍스트 말줄임 표시와 배경 흐림 처리 (0) 2021.08.06 Vue 프로젝트 영화 아이템 - 기본 출력 (0) 2021.08.06