Skip to content

u-field-array component ​

The u-field-array component is used to manage array-type fields within a form, such as lists of names, addresses, or nested objects.
It provides helper methods through scoped slots so you can easily add and remove items from an array.

Basic usage ​

Here is a simple example with a list of names:

vue
<script setup lang="ts">
import { ref } from "vue";

let formValues: { name: string[] } = {
  name: ["foo", "bar", "foobar"],
};

function onSave(data: {}) {
  alert(JSON.stringify(data, null, 2));
}
</script>
<template>
  <u-form :values="formValues" @submit="onSave">
    <u-field-array name="name" v-slot="{ fields, remove, push }">
      <div v-for="(field, key) in fields" :key="key">
        <u-field
          :name="`name[${key}]`"
          :label="`Name #${key + 1}`"
          v-slot="{ value, update }"
        >
          <input f-model />

          <button type="button" @click="remove(key)">Remove Item</button>
        </u-field>
      </div>

      <button type="button" @click="push('abc')">Add Item</button>
    </u-field-array>

    <u-submit />
  </u-form>
</template>

You can use:

  • push(item) to add a new item to the array
  • remove(index) to remove an item by its index

Nested objects ​

The component also works with arrays of objects. For example, here is a list of addresses:

vue
<script setup lang="ts">
function onSave(data: {}) {
  alert(JSON.stringify(data, null, 2));
}

let formValues2: { address: { city: string }[] } = {
  address: [{ city: "shenzhen" }, { city: "qingdao" }],
};
</script>
<template>
  <u-form :values="formValues2" @submit="onSave">
    <u-field-array name="address" v-slot="{ fields, remove, push }">
      <div v-for="(field, key) in fields" :key="key">
        <u-field
          :name="`address[${key}].city`"
          :label="`City #${key + 1}`"
          v-slot="{ value, update }"
        >
          <input f-model />
          <button type="button" @click="remove(key)">Remove Item</button>
        </u-field>
      </div>
      <button type="button" @click="push({ city: 'jinan' })">Add Item</button>
    </u-field-array>
    <u-submit />
  </u-form>
</template>

Schema support ​

Like u-form and u-field, u-field-array also supports scheme configuration.
Priority order is:

custom prop > u-field’s scheme > u-field-array’s scheme > u-form’s scheme > default configuration.