ex) 유투브는 전역 로딩바 없음!! 섹션을 더 중하게 여김
// store/layout/index.ts
/* action */
updateLoadingIndicatorGlobal(payload: LayoutType.LoadingIndicator) {
this.loadingIndicatorGlobal = payload
}
// component/bars/header/Tools.ts
const handleOnLogin = async () => {
try {
layoutStore.updateLoadingIndicatorGlobal(true)
await Promise.all([
await userStore.fetchAuthToken(),
await userStore.fetchUser()
])
} catch (err) {
console.log(err)
} finally {
layoutStore.updateLoadingIndicatorGlobal(false)
}
}
// component/base/ImageContainer.vue
const isTimeout = ref(false)
const isLoadFail = ref(false)
const isLoadDone = ref(false)
const handleOnLoadFail = (evt: Event) => {
isLoadDone.value = true
isLoadFail.value = true
;(evt.target as HTMLImageElement).remove()
}
const handleOnLoadDone = () => {
isLoadDone.value = true
isLoadFail.value = false
}
onMounted(() => {
setTimeout(() => {
if (!isLoadDone.value) {
isTimeout.value = true
isLoadDone.value = true
isLoadFail.value = true
}
}, 8000)
})