VueJS vue-spinner 属性 或方法 "loading" 未定义

VueJS vue-spinner property or method "loading" is not defined

您好,我正在尝试设置 view-spinner,但出现错误:

vue.esm.js:591 [Vue warn]: Property or method "loading" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property.

这是我的主要 JS (app.js):

import Vue from 'vue';
import App from './App.vue'
import axios from 'axios'
import router from './router'
import store from './vuex/store';
import PulseLoader from 'vue-spinner/src/PulseLoader.vue'

require('../scss/style.scss');

Vue.config.productionTip = false;
Vue.prototype.$http = axios;

new Vue({
    el: '#vueApp',
    router,
    store,
    template: '<App/>',
    components: {
        App,
        PulseLoader
    },
});

我的.vue

    <template>
    <div class="app">
        <pulse-loader :loading="loading" :color="color" :size="size"></pulse-loader>
        <nav class="navbar navbar-expand-lg navbar-light bg-light">
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav"
                    aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
            </button>
            <div class="collapse navbar-collapse" id="navbarNav">
                <ul class="navbar-nav">
                    <router-link class="nav-item" tag="li" to="/" active-class="active">
                        <a class="nav-link">Home</a>
                    </router-link>
                    <router-link class="nav-item" tag="li" to="/wow" active-class="active">
                        <a class="nav-link">Wow</a>
                    </router-link>
                </ul>
            </div>
        </nav>

        <router-view></router-view>
    </div>
</template>


<script>
    export default {
        name: 'app',
        data: () => {
            return {
                color: '#000000',
                size: '1000px'
            }
        }
    }
</script>

<style lang="scss">

</style>

感谢您的帮助。

在您的数据对象中添加 loading 属性 并按如下方式导入模块:

  import PulseLoader from "vue-spinner/src/PulseLoader.vue";
 export default{
 data: () => {
        return {
            color: '#000000',
            size: '1000px',
            loading:true
        }
    },
   components:{PulseLoader}
   ...
  }

或者您可以使用 computed 和 属性,例如:

  computed:{
  loading(){ return true;} 
   }

你可以做任何你想做的事,return一个布尔值 loading name

您似乎在错误的地方设置了 vue-spinner,即 main.js 而不是 App.vue

有效(参见 CodeSandbox

main.js

import Vue from "vue";
import App from "./App";
// import PulseLoader from "vue-spinner/src/PulseLoader.vue";

Vue.config.productionTip = false;

/* eslint-disable no-new */
new Vue({
  el: "#vueApp",
  template: "<App/>",
  components: {
    App,
    // PulseLoader
  }
});

App.vue

<template>
  <div id="app">
    <pulse-loader :loading="loading" :color="color" :size="size"></pulse-loader>
    ...
  </div>
</template>

<script>
import PulseLoader from "vue-spinner/src/PulseLoader.vue";

export default {
  name: "App",
  data() {
    return {
      loading: true,
      color: "#2c3e50",
      size: "10px"
    };
  },
  components: {
    PulseLoader,
    ...
  }
};
</script>

<style>
 ...