Невозможно использовать v-for для элемента root компонента stateful, потому что он отображает несколько элементов?
app.js
var Users = {
template: '
<tr v-for="list in UsersData">
<th>{{ list.idx }}</th>
<td>{{ list.id }}</td>
</tr>
',
data: function () {
return {
UsersData //get data from query
}
}
}
var mainview = new Vue({
el: "#mainview",
components: {
'users': Users
},
method: {}
})
layout.blade.php
<body>
<div class="container">
<aside>...</aside>
<main id="mainview">
@section('content')
@show
</mainview>
</div>
</body>
index.blade.php
@extends('layout')
@section('content')
<table>
<thead>
<tr>
<th>IDX</th>
<th>ID</th>
</tr>
</thead>
<tbody>
<users></users>
</tbody>
</table>
@endsection
ERROR LOG из хромированной консоли
[Vue warn]: Невозможно использовать v-for для элемента root компонента stateful, поскольку он отображает несколько элементов:
<tr v-for="list in UsersData">
<th>{{ list.idx }}</th>
<td>{{ list.id }}</td>
</tr>
vue.js: 525 [Vue warn]: Несколько корневых узлов, возвращаемых из функции рендеринга. Функция Render должна возвращать один корневой узел. (найдено в компоненте)
Как мне исправить код?
Ответы
Ответ 1
Ваш шаблон должен иметь один корневой элемент. Это просто одно правило, которое вы не можете сломать. Поскольку вы создаете таблицу, имеет смысл сделать tbody
корневым элементом.
var Users = {
template: '
<tbody>
<tr v-for="list in UsersData">
<th>{{ list.idx }}</th>
<td>{{ list.id }}</td>
</tr>
</tbody>
',
data: function () {
return {
UsersData //get data from query
}
}
}
index.blade.php
@extends('layout')
@section('content')
<table>
<thead>
<tr>
<th>IDX</th>
<th>ID</th>
</tr>
</thead>
<users></users>
</table>
@endsection
Ответ 2
Для ленивых: Vue интерпретирует корневой элемент, имеющий цикл v-for
на нем, как создающий несколько элементов корневого уровня (nono в современных JS-инфраструктурах).
Просто оберните свой шаблон в лишний пустой <div>
. 👌