Понадобится функция, которая вложенный массив развернёт в плоский:
const flat = (arr, childrenKey = 'children') =>
(arr instanceof Array ? arr : []).reduce((acc, n) => (
acc.push(n, ...flat(n[childrenKey], childrenKey)),
acc
), []);
// или, если нужны копии объектов без ссылок на массивы вложенных объектов:
const flat = (arr, childrenKey = 'children') =>
Array.isArray(arr)
? arr.flatMap(({ [childrenKey]: c, ...n }) => [
n,
...flat(c, childrenKey),
])
: [];
Дальше всё просто - вычисляемое свойство,
v-for
по его значению:
computed: {
users() {
return flat(this.elements);
},
},
<option v-for="n in users" :key="n.id">{{ n.name }}</option>