【问题标题】:vue.js Property or method is not definedvue.js 属性或方法未定义
【发布时间】:2021-03-05 00:48:58
【问题描述】:

我正在创建(在带有引导程序的 vue.js 中)一个简单的应用程序来添加/编辑/删除列表中的项目。我收到一个错误:“[Vue 警告]:属性或方法“项目”未在实例上定义,但在渲染期间被引用。确保此属性是反应性的,无论是在数据选项中,还是在类中 -基于组件,通过初始化属性"。

编辑按钮和搜索输入正常工作。提交按钮正在将新行添加到表中,但未添加数据。

你能告诉我应该改变什么吗?

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    数据没有添加到表中,因为基本上,您在 addNewItem 方法中添加了空属性。

    addNewItem() {
        this.items.push({
            id: '',
            age: '',
            first_name: '',
            last_name: ''
         });
     }
    

    项目列表变量是您要插入所有项目的位置。对于表单数据,您应该创建另一个变量来捕获它们,然后将单个对象推送到列表中:

    export default{
        data(){
            return{
                // single object where you are going to catch form data
                item:{
                  id: null,
                  age: null,
                  first_name: '',
                  last_name: ''
                }
    
                // Your list of objects
                items: [
                  { id: 1, age: 40, first_name: 'Dickerson', last_name: 'Macdonald'},
                  { id: 2, age: 21, first_name: 'Larsen', last_name: 'Shaw' },
                  { id: 3, age: 89, first_name: 'Geneva', last_name: 'Wilson' },
                  { id: 4, age: 38, first_name: 'Jami', last_name: 'Carney' }
                ],
            }
        }
    }
    

    所以,在输入模型中,而不是 items.property_name 使用 item.property_name

    <b-form inline>
        <b-form-input
            v-model="item.id"
            requierd
            placeholder="Id"
        ></b-form-input>
        <b-form-input
            v-model="item.age"
            requierd
            placeholder="Age"
        ></b-form-input>
        <b-form-input
            v-model="item.first_name"
            requierd
            placeholder="First Name"
         ></b-form-input>
         <b-form-input
            v-model="item.last_name"
            requierd
            placeholder="Last Name"
         ></b-form-input>
       </b-form>
    

    然后在 addNewItem() 方法中将单个对象推送到列表中

    addNewItem() {
        this.items.push(this.item);
     }
    

    【讨论】:

      【解决方案2】:

      您的 DataTable 组件有一个 :items 道具,但您尚未在实际组件中定义任何道具。我看到您的数据选项中有一个 items 数组,因此如果您将 items 道具 :items="items" 一起删除,应该很好。

      【讨论】:

      • 感谢您的回复。我已经删除了 items 道具,现在我没有收到错误消息。我仍在寻找为什么提交按钮将空行添加到表中而没有来自b-form-inputs 的数据的想法。我认为&lt;b-form inline&gt; 有一些错误,它没有将日期转移到addNewItem 方法。
      • 将您的 v-model 从项目更改为项目,您通过在 v-models 中使用它来覆盖数据选项中的项目。然后将 item: {} 添加到您的数据选项中,然后在您的 addNewItem() 方法中推送项目,就像this.items.push(this.item);
      • 这是它的沙盒工作codesandbox.io/s/nostalgic-black-h74xh
      猜你喜欢
      • 2019-12-25
      • 2017-08-28
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 2019-12-13
      • 2018-09-10
      • 1970-01-01
      • 2019-12-07
      相关资源
      最近更新 更多