【问题标题】:How to assign array data retrieved from state to v-model of array data object in vue.js?如何将从状态检索到的数组数据分配给 vue.js 中数组数据对象的 v-model?
【发布时间】:2019-11-29 04:13:36
【问题描述】:

我有一个使用 vuex getter 检索到的来自 vuex 状态的申请人列表。从前端,我将他们各自的结果记录为一个数组并提交他们的结果。但我无法将申请者 ID 分配给 v-model。

我尝试过使用数组和数组对象但不起作用。 我尝试循环创建页面上的申请者列表并将其分配给Vue数据中声明的数组数据。

模板代码

<template>
<table style="margin-left:10%;">
          <tr>
            <th>#</th>
            <th>Full Name</th>
            <th>Result</th>
          </tr>
          <tr
            v-for="(applicant, key) in getApplicants"
            :key="applicant.applicant_id"
          >
            <td>{{ key + 1 }}</td>
            <td>
              {{ applicant.first_name }} {{ applicant.middle_name }}
              {{ applicant.last_name }}
              <b-form-input v-model="record.applicant_id[key]"></b-form-input>
            </td>
            <td>
              <b-form-input v-model="record.exam_result[key]"></b-form-input>
            </td>
          </tr>
        </table>
<template>

脚本代码

data() {
    return {
      update: false,
      record: {
        job_vacancy_id: null,
        exam_type_id: null,
        applicant_id: [],
        exam_result: []
      }
    };

methods:{
 save() {
      var object = {
        job_vacancy_id: this.record.job_vacancy_id,
        manpower_requisition_id: this.manpower_requisition_id,
        applicants_id: this.applicants_id,
        exam_result: this.record.exam_result
      };
      console.log(object);
    },
populate() {
      let appliacnts = this.getApplicants;
      for (var i = 0; i <= appliacnts.length; i++) {
        this.record.applicant_id = this.appliacnts.applicant_id[i];
      }
    }
},

created() {
    this.populate();
  }

【问题讨论】:

    标签: javascript arrays object vue.js


    【解决方案1】:

    有几个错误:

    1. this.record.applicant_id 是一个数组,所以你需要一个索引,在 = 之前。
    2. this.appliacnts 不应有 this
    3. this.appliacnts.applicant_id[i] 有错误部分的索引。它应该在applicant_id 之前。
    4. appliacnts 拼写不正确。但它是一致的,因此不会造成任何问题。

    纠正我们得到的一切:

    populate() {
      const applicants = this.getApplicants;
      for (var i = 0; i <= applicants.length; i++) {
        this.record.applicant_id[i] = applicants[i].applicant_id;
      }
    }
    

    虽然这不是一个特别安全的实现。如果再次调用它并且数组更短,它将保留数组中的旧条目。我更倾向于这样写:

    populate() {
      const applicants = this.getApplicants;
      this.record.applicant_id = applicants.map(applicant => applicant.applicant_id);
    }
    

    【讨论】:

    • 绝妙的答案!它现在可以正常工作了!感谢裙子!
    【解决方案2】:

    我觉得应该是this.record.applicant_id[i] = appliacnts.applicant_id[i]

    populate() {
          let appliacnts = this.getApplicants;
          for (var i = 0; i <= appliacnts.length; i++) {
            this.record.applicant_id[i] = appliacnts.applicant_id[i];
          }
        }
    },
    

    【讨论】:

    • 我也试过这个,但它不起作用。它回应我无法读取未定义的属性“applicant_id”。但申请人 id 是确切的属性名称。
    • 我更新了答案。从this.appliacnts.applicant_id[i] 更改为appliacnts.applicant_id[i]
    • 它仍然无法正常工作。它试图记录 this.getApplicants 集合并显示数据。但是当我尝试记录 this.getApplicants.applicant_id 时,它会响应我 undefined 并且如果我向它添加索引,则无法读取 0 未定义的第一个索引号的属性。
    猜你喜欢
    • 2016-03-11
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2021-02-24
    • 2018-06-04
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多