我发现vue组件和内联模板之间存在奇怪的行为。
示例#1:内嵌模板
这是按预期工作的。根据下面的示例#2,vue组件未更改,唯一的区别是我已将模板内容作为内联模板复制到标记中。
请参阅:https://jsfiddle.net/pobffmnv/
<div class="panel panel-primary">
<div class="panel-heading">Current Clients</div>
<table class="table table-hover">
<thead>
<tr>
<th>Client Name</th>
<th style="text-align: center;">No. Projects</th>
<th style="text-align: center;">Time (7 days)</th>
<th style="text-align: center;">Edit</th>
</tr>
</thead>
<tbody>
<clientlistitem inline-template>
<tr>
<td>Test</td>
<td style="text-align: center;">0</td>
<td style="text-align: center;">0</td>
<td style="text-align: center;">
<div class="btn-group btn-group-xs" role="group">
<button type="button" class="btn small btn-primary">Edit</button>
</div>
</td>
</tr>
</clientlistitem>
</tbody>
</table>
</div>
示例#2:非内联
以下是我的Vue模板。以下是删除内联模板的代码更改。
请参阅:https://jsfiddle.net/Ld47hoy2/
<template>
<tr>
<td>Test</td>
<td style="text-align: center;">0</td>
<td style="text-align: center;">0</td>
<td style="text-align: center;">
<div class="btn-group btn-group-xs" role="group">
<button type="button" class="btn small btn-primary">
Edit
</button>
</div>
</td>
</tr>
</template>
<script>
export default {
}
</script>
更新了网页代码:
<div class="panel panel-primary">
<div class="panel-heading">Current Clients</div>
<table class="table table-hover">
<thead>
<tr>
<th>Client Name</th>
<th style="text-align: center;">No. Projects</th>
<th style="text-align: center;">Time (7 days)</th>
<th style="text-align: center;">Edit</th>
</tr>
</thead>
<tbody>
<clientlistitem></clientlistitem>
</tbody>
</table>
</div>
查看页面输出的源代码,它似乎已将呈现的代码放在我的表格之前......?我希望它介于<tbody></tbody>
标签之间..
为什么Vue会将代码输出到该位置而不是预期的位置?
答案 0 :(得分:5)
这里的问题是,in DOM templates模板首先由浏览器呈现,而HTML表只允许内部的某些元素。在这种情况下,组件clientlistitem
首先在外面表中呈现,然后Vue编译模板,导致组件位于错误的位置。
要解决此问题,请使用is
special attribute。
<tbody>
<tr is="clientlistitem"></tr>
</tbody>
浏览器会接受此操作并将tr
呈现在正确的位置,但Vue会将其解释为您的组件。
这是你的小提琴updated。