【问题标题】:How to use Vuelidate for an Object of an Array?如何将 Vuelidate 用于数组的对象?
【发布时间】:2021-05-28 18:02:35
【问题描述】:

我有以下vue数组;

    server: [
          { id: 1, name: 'Name A', ipaddress: '192.168.1.1', status: true, applied: true, modal: false },
          { id: 1, name: 'Name A', ipaddress: '192.168.1.1', status: true, applied: true, modal: false },
        ]

我使用这个数组在数据表上显示这些信息。用户可以在这个表中添加新行,也就是可以推送数组。此外,他们可以使用 splice 方法从表中删除他们想要的行。最后,每一行都有一个编辑按钮。由于这些按钮通过 v-model 连接到数组中的元素,因此用户可以在打开的模式窗口中对他们想要的行进行更改。 添加和编辑操作通过按下按钮时打开的两种不同模式进行。

根据所有这些信息,我想问一个问题。如何使用 Vuelidation 将验证写入可以连续添加新 rpws 的数组?这是我的 vuelidation 函数;

validations: {
  server: {
    required,
    $each: {
      name: {
        required
      },
      ipaddress: {
        required
      }
    }
  }
}

例如,我刚刚为两个元素定义了required 属性。以下是我在添加和编辑模式中使用它们的方式;

    <div>
        <div">
            <label>Name</label>
        </div>
        <div>
            <label>:</label>
        </div>
        <div>
            <input v-if="server[i].modal" v-model="server[i].name" type="text"/>
        </div>
        <small class="error-msg" v-if="!$v.server[i].name.required && $v.server[i].name.$dirty">Name is required.</small>
    </div>

这是我向表中添加新行的方法;

  addNewRow(){
    this.server.push({
      name: "",
      ipaddress: "",
      status: true,
      applied: false,
      modal: false
    });
  },

现在我有这个错误;

[Vue warn]: Error in render: "TypeError: Cannot read property 'name' of undefined"

我认为我在这里遗漏了一个重要部分,那么我该如何纠正呢?提前致谢。

【问题讨论】:

  • 您好,您如何添加新项目?在您在桌子上添加新项目之前代码是否有效?
  • 我已经更新了我的问题,所以你可以看到我的添加功能。我解释的部分工作得很好。我可以编辑现有行并添加新行。
  • 帮助您更好地理解 1. 您想要编辑/添加的验证规则吗? 2. 除了您遇到的错误,其他一切都正常吗?
  • 确实如此。一切正常。我想要做的是将 vuelidation 添加到我的添加和编辑模式中,以便我可以检查用户是否输入了正确的 IP 地址格式。

标签: arrays vue.js vuelidate


【解决方案1】:

您的添加模式可能会延迟模板,因此不会定义 server[i] 项。我建议使用不同的变量进行添加 (newItem = {name: '', ...})

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 2020-12-22
    • 2018-07-01
    • 1970-01-01
    • 2020-09-07
    • 2021-08-22
    相关资源
    最近更新 更多