인프런 커뮤니티 질문&답변

leesh2376님의 프로필 이미지

작성한 질문수

[웹 개발 풀스택 코스] Vue.js 프로젝트 투입 일주일 전 - 기초에서 실무까지

vue-loading-overlay

vue-loading-overlay show 오류 발생

작성

·

176

0

main.js

import VueLoading from 'vue-loading-overlay'
import 'vue-loading-overlay/dist/css/index.css'

app.use(VueLoading)

LoadingOverlayView.vue

<template>
  <div>
    <button @click="doSearch">조회</button>
  </div>
</template>
<script>
export default {
  components: {},
  data() {
    return {
      sampleData: ''
    }
  },
  setup() {},
  created() {},
  mounted() {},
  unmounted() {},
  methods: {
    doSearch() {
      const loader = this.$loading.show()
      // simulate AJAX
      setTimeout(() => {
        loader.hide()
      }, 5000)
    }
  }
}
</script>

오류내용

Cannot read properties of undefined (reading 'show')
TypeError: Cannot read properties of undefined (reading 'show')
    at Proxy.doSearch (webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/views/9_module/LoadingOverlayView.vue?vue&type=script&lang=js:15:36)
    at onClick._cache.<computed>._cache.<computed> (webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/templateLoader.js??ruleSet[1].rules[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/views/9_module/LoadingOverlayView.vue?vue&type=template&id=ce3ceda8:9:83)
    at callWithErrorHandling (webpack-internal:///./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js:351:19)
    at callWithAsyncErrorHandling (webpack-internal:///./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js:358:17)
    at HTMLButtonElement.invoker (webpack-internal:///./node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js:883:82)

무엇 때문에 발생하는 오류일까요?

답변 2

0

leesh2376님의 프로필 이미지
leesh2376
질문자

main.js

import 'vue-loading-overlay/dist/css/index.css'
app.component('vue-loading', VueLoading)
// app.use(VueLoading)  --> component로 이동

 

LoadingOverlayView.vue

<template>
  <div class="vl-parent">
    <vue-loading
      v-model:active="isLoading"
      :can-cancel="true"
      :on-cancel="onCancel"
      :is-full-page="fullPage"
    />

    <label><input type="checkbox" v-model="fullPage" />Full page?</label>
    <button class="btn btn-primary me-2" @click.prevent="doAjax">
      fetch Data
    </button>
    <button class="btn btn-danger" @click.prevent="onCancel">Cancel</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      isLoading: false,
      fullPage: true
    }
  },
  methods: {
    doAjax() {
      this.isLoading = true
      // simulate AJAX
      setTimeout(() => {
        this.isLoading = false
      }, 5000)
    },
    onCancel() {
      this.isLoading = false
      console.log('User cancelled the loader.')
    }
  }
}
</script>

우선 위와 같이 수정하니까 되는데

조금 단순하게 하는 방법은 없을까요?

0

개발자의 품격님의 프로필 이미지
개발자의 품격
지식공유자

vue-loading-overlay 최신 스펙을 확인해주시면 좋읗거 같습니다.

설치하신 버전에 따라 내장 함수 사용법이 달라질 수 있습니다