Vue组件-渲染位置错误

R. *_*son 5 javascript vue.js vue-component vuejs2

我看到Vue组件和内联模板之间有奇怪的行为。

示例#1:内联模板

这正在按预期方式工作。vue组件按下面的示例#2不变,唯一的区别是我已将模板内容作为内联模板复制到了标签中。

参见: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>
Run Code Online (Sandbox Code Playgroud)

正确显示以下内容: 正确

范例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>
Run Code Online (Sandbox Code Playgroud)

更新的页面代码:

<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>
Run Code Online (Sandbox Code Playgroud)

但是,使用以上显示以下内容: 不正确的

查看页面输出的源代码,似乎已将呈现的代码放在我的表之前...?我希望这是在<tbody></tbody>标签之间。

奇怪的输出

Vue将代码输出到该位置而不是预期位置的任何原因是什么?

Ber*_*ert 7

这里的问题是,在DOM模板中,模板首先由浏览器呈现,而HTML表仅允许其中包含某些种类的元素。在这种情况下,clientlistitem首先将组件呈现,然后Vue编译模板,从而导致组件放置在错误的位置。

要解决此问题,请使用isspecial属性

<tbody>
  <tr is="clientlistitem"></tr>
</tbody>
Run Code Online (Sandbox Code Playgroud)

浏览器将接受它并tr在正确的位置呈现,但是Vue会将其解释为您的组件。

这是您的小提琴更新