【问题标题】:"Property or method "products" is not defined on the instance but referenced during render" Error in Vue App“属性或方法“产品”未在实例上定义,但在渲染期间引用“Vue App 中的错误
【发布时间】:2021-07-30 00:15:39
【问题描述】:

我在我的 localhost REST 端点有一个产品 JSON 数组,我想在我的 Vue 应用程序中显示它导致 axios。我在“数据”中定义了一个空数组以使其具有反应性,但我不断收到“产品”未在实例上定义“错误, 截屏: 我的 Products.vue 文件:

<template>
  <div>
    <h1>Products</h1>
    <div class="card" v-bind:key="p.id" v-for="p in products">
      <div class="container">
        <h3>{{ p.name }}</h3>
        <p>Cost: {{ p.price }}</p>
      </div>
    </div>
  </div>
</template>

<script>
import axios from "axios";

export default {
  data() {
    return {
      products: [],
    };
  },
  mounted() {
    axios
      .get("http://localhost:8080/products/all")
      .then((response) => {
        this.products = response.data.results;
      })
      .catch((error) => {
        console.log(error);
      });
  },
};

</script>

我的 App.vue 文件:

<template>
  <div id="app">
        <h1>{{ msg }}</h1>
    <Products v-bind:products="products"/>
  </div>
</template>

<script>
import Products from './components/Products.vue';
export default {
  name: 'App',
  components: {
    Products
  },
  data(){
    return{
      msg: 'Check 123'
    }
  },
}
</script>

我的 main.js 文件:

import Vue from 'vue'
import App from './App.vue'


Vue.config.productionTip = false
Vue.component('products', require('./components/Products.vue'));
new Vue({
  render: h => h(App),
  data: {
      products: []
    }
  }).$mount('#app')

【问题讨论】:

  • 假设您使用的是 Vue CLI 和单文件组件(看起来像),除了答案中对 App.vue 建议的更改之外,您还可以删除 Vue.component(...) 和 @987654327 @ 来自 main.js。
  • 我已经按照您的建议和答案进行了更改,并且不再出现错误。但是当我检查时,我的产品仍然“未定义”。
  • 已解决,谢谢!

标签: node.js rest vue.js axios


【解决方案1】:

由于products 是在Products.vue 组件中定义和获取的,因此无需将它们作为道具传递,因此App.vue 应该如下所示:

<template>
  <div id="app">
        <h1>{{ msg }}</h1>
    <Products />
  </div>
</template>

<script>
import Products from './components/Products.vue';
export default {
  name: 'App',
  components: {
    Products
  },
  data(){
    return{
      msg: 'Check 123'
    }
  },
}
</script>

【讨论】:

  • 你是救生员。谢谢!我进行了更改,错误不再出现。但是,我的产品数组仍然没有填充。当我检查它时,它仍然显示“未定义”。当我到达终点时,它给了我数组。有任何想法吗?再次感谢。
  • 我的 products.vue: ///// export default { data() { return { products: [], }; },mounted() { this.getProducts(); }, 方法: { getProducts() { axios .get("localhost:8080/products/all") .then((response) => { this.products = response.data.results; }) .catch((error) => { console.日志(错误); }); }, }, };
  • App.vue 和你说的一模一样,main.js 也没有变化
  • 我认为你应该这样做this.products = response.data?
  • 就是这样,你赢了。向我展示你的方式大师。我怎样才能像你一样优秀 lmao。我只是一个初学者。
猜你喜欢
  • 2019-03-30
  • 2021-08-19
  • 2018-07-24
  • 2021-05-04
  • 2019-05-05
  • 2022-01-04
  • 2019-03-27
  • 2019-02-20
  • 2021-11-27
相关资源
最近更新 更多