개인공부/Vue.js

Toast 알림 만들기

j_yeaseul 2023. 4. 19. 11:24

Toast.vue

<template>
  <div
    class="alert toast-box"
    :class="`alert-${type}`"
    role="alert">
    {{ message }}
  </div>
</template>
<script>
export default {
    props: {
        message: {
            type: String,
            required: true
        },
        type: {
            type: String,
            default: 'success'
        }
    }
}
</script>
<style>
.toast-box {
    position: fixed;
    top: 10px;
    right: 10px;
}
</style>

: 부모컴포넌트로부터 message와 type정보를 받아 dom에 출력하는 방식

 

부모컴포넌트

<template>
<Toast v-if="showToast"
 :message="toastMessage"
 :type="toastAlertType"/>
</template>

<script>
components:{Toast},
  setup () {
   onUnmounted(() => {
    //쓸데없는 메모리 누수 방지
    clearTimeout(timeout.value);
   });
   
   const showToast = ref(false);
   const toastAlertType = ref('');
   const timeout = ref(null);
   const toastMessage = ref('');

const triggerToast = (message,type) => {
       toastMessage.value = message;
       toastAlertType.value = type;
       showToast.value = true;
       
       timeout.value = setTimeout(() => {
        toastMessage.value = '';
        toastAlertType.value = '';
        showToast.value = false;
       },3000)
      }
 const onSave = async () => {
       try {
        const res = await axios.put(`http://localhost:3000/todos/${todoId}`, {
         subject: todo.value.subject,
         completed: todo.value.completed
        });
        triggerToast('Successfully saved!','success');
       } catch(err) {
        console.log(err);
        triggerToast('Something went wrong','danger');
       }
      }
      return{
      showToast,toastMessage,toastAlertType
      }
 }
</script>

 

'개인공부 > Vue.js' 카테고리의 다른 글

toRefs 와 module 사용하기  (0) 2023.04.27
slot 사용법  (0) 2023.04.25
Vue3의 LifeCycle  (0) 2023.04.19
Router  (0) 2023.04.14
[vue] ref - DOM요소나 자식컴포넌트 참조 가능  (0) 2023.02.27