当我在 @foreach 标签内加载 vue 组件时,它首先在其父组件之外渲染。
//view
<div class="contenido" style="padding-top:5%">
<table class="table">
<thead class="thead-dark">
<tr>
<th class="col-md-8">Nombre descripción general</th>
<th class="col-md-2">Actualizar</th>
<th class="col-md-2">Consultar</th>
</tr>
</thead>
<tbody>
@foreach($descs as $desc)
<tab-descgen desc-nombre = "{{ $desc -> nombre }}" desc-id = "{{ $desc -> id }}"></tab-descgen>
@endforeach
</tbody>
</table>
//vue component
<template>
<tr >
<td>{{ this.descNombre }}</td>
<td><i style="font-size:30px;" class="fa fa-edit float-center"></i>
</td>
<td><i style="font-size:30px;" class="fa fa-arrow-circle-right
float-center"></i></td>
</tr>
</template>
<script>
export default {
props:['descNombre', 'descId'],
当它被渲染时,vue 组件内的表格行将被渲染在标题上方,我不太明白为什么。我想知道我是否遗漏了什么。
最佳答案
即使忽略所有服务器端的东西,这也行不通:
<tbody>
<tab-descgen></tab-descgen>
</tbody>
在单文件组件中会很好,但如果此标记进入浏览器(就像您的情况一样),它会将 tab-descgen
从表格中删除在 Vue 接近它之前。
您需要使用 is
来解决这个问题:
<tbody>
<tr is="tab-descgen"></tr>
</tbody>
文档中对此进行了解释:
https://v2.vuejs.org/v2/guide/components.html#DOM-Template-Parsing-Caveats
简而言之,仅允许 tr
元素作为 tbody
的直接子元素,其他任何内容都会被删除。解决方法是使用 tr
,然后使用 is
让 Vue 知道您真正想要什么。
关于javascript - Vue 内容在父组件之外渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56651841/