【问题标题】:Vuejs -- Computed property not being defined on the instanceVuejs - 未在实例上定义计算属性
【发布时间】:2018-07-19 14:53:59
【问题描述】:

我是 VueJS 的新手,我很难让子组件正常工作。

首先,我在“视图”中有一些代码,我意识到我想多次使用它,所以我开始将这些代码分解为一个单独的组件,但我遇到了这个问题:

[Vue 警告]:属性或方法 "<feedbackCallback|stateCallback|submitCallback>" 未在实例上定义,但在渲染期间被引用。确保在 data 选项中声明响应式数据属性。

我的设置如下:

  • Vue 2.4.2
  • Webpack 3.5.5
  • Bootstrap-Vue 1.0.0
  • Vue-Router 2.7.0
  • 我也在使用单文件组件

我将调用“视图”ViewA 的文件和“组件”“CompA”的文件

ViewA 移除了未进入单独组件的部分:

<template>
  [...]
  <b-form @submit="submitCallback">
    <b-form-group
      id="groupID"
      description=""
      label="Set Thing Here" :feedback="feedbackCallback"
      :state="stateCallback">
      <b-form-input
        id="inputID" :state="stateCallback"
        v-model.trim="thing">
      </b-form-input>
    </b-form/group>

    <b-button type="submit" variant="primary">Submit</b-button>
  </b-form>
  [...]
</template>

<script>
export default {
  [...]
  data () {
    return {
      thing: '',
      [...]
    }
  },
  computed: {
    stateCallback () {
      return 'invalid'
    },
    feedbackCallback () {
      return 'Please enter a valid thing'
    }
  },
  methods: {
    submitCallback (event) {
      [...]
    }
  },
  [...]
</script>

现在,我把这些人搬到了 CompA。

这是我得到错误的代码:

视图A:

<template>
  [...]
  <comp-a v-model.trim="thing" :thingvalue="thing"></comp-a>
  [...]
</template>

<script>
import CompA from '../components/CompA'

export default {
  name: 'view-a'
  components: {
    CompA
  },
  data () {
    return {
      thing: ''
    }
  }
}
</script>

CompA:

<template>
  <b-form @submit="submitCallback">
    <b-form-group
      id="groupID"
      description=""
      label="Set Thing Here" :feedback="feedbackCallback"
      :state="stateCallback">
      <b-form-input
        id="inputID" :state="stateCallback"
        :value="thingvalue">
      </b-form-input>
    </b-form/group>

    <b-button type="submit" variant="primary">Submit</b-button>
  </b-form>
</template>

<script>
export default {
  props: {
    thingvalue: {
      type: String
      required: true
    }
  },  
  computed: {
    stateCallback () {
      return 'invalid'
    },
    feedbackCallback () {
      return 'Please enter a valid thing'
    }
  },
  methods: {
    submitCallback (event) {
      [...]
    }
  }
}
</script>

您可能会注意到,当我将代码移过来时,我将 v-model.trim="thing" 更改为 :value="thing"。在我这样做之前,我遇到了同样的错误。

现在有什么我缺少的吗?我一直在挖掘很多东西来尝试理解。我什至查看了一些 bootstrap-vue 的代码,看看它们是否做了一些时髦的事情。但事实证明,它们有一些计算属性以非常相似的方式使用。所以我不明白问题出在哪里。如果您需要更多信息,请告诉我。

更新

我更确信 WebPack 和 VueJS 发生了一些事情,因为我在捆绑的 js 文件中没有找到这些属性/方法的任何定义。

【问题讨论】:

  • 不确定您的错误,但您不应该将组件prop 绑定到valuev-model。见vuejs.org/v2/guide/components.html#One-Way-Data-Flow
  • 另外,请尝试重新加载页面。由于 Webpack 的热重载,您可能在过去的某个时间点在编辑文件时遇到了该错误。它甚至可能不再存在
  • 尝试重新编译。
  • 如果正在加载计算属性,请检查 Vue 开发工具。
  • @gshawm Vue 开发工具在 chrome 中作为扩展提供。

标签: javascript html vue.js vuejs2 vue-component


【解决方案1】:

结果证明这只是我的一个愚蠢的错误。没有结束脚本标记。 Eslint 也没有捕捉到(也许有一个设置可以确保它捕捉到),所以它用 webpack 编译就好了。教训:永远记住你的结束标签!

【讨论】:

  • 就我而言,我定义了两个计算:{}。后一个肯定覆盖了第一个。
猜你喜欢
  • 2018-08-28
  • 2020-09-15
  • 2020-06-20
  • 2018-04-14
  • 2017-10-17
  • 2021-09-02
  • 2021-08-20
  • 2022-01-24
  • 2019-08-08
相关资源
最近更新 更多