css Vue未正确渲染表

ztigrdn8  于 2024-01-09  发布在  其他
关注(0)|答案(2)|浏览(113)

我试图呈现一个表的行,其中每一行都是我的自定义组件<todo-list>,但结果行在我的表之外呈现。为什么会这样?
下面是DOM树的屏幕截图,显示了正在发生的事情:


的数据
我的看法:

<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Dashboard</div>

                <div class="panel-body">

                    <div id="appTest">
                        <div>@{{error}}</div>


                        <table class="table-responsive">
                            <todo-list
                                    v-for="todo in todos"
                                    v-bind:todo-obj="todo"
                                    v-bind:key="todo.id"
                                    :todo-obj.sync="todo"
                                    v-on:usun="deleteTod"
                                    ></todo-list>
                        </table>

                        <div v-if="isLogged" id="todoText">
                            <textarea v-model="todoText" cols="53" rows="5"></textarea>
                            <div id="addButton">
                                <button v-on:click="addTodo" class="btn btn-success" >Add to do</button>
                            </div>
                        </div>
                        <div v-else>
                            You have to be
                            <a href="login">Login</a>
                            to add new todos
                        </div>

                    </div>
                </div>
            </div>

        </div>
    </div>
</div>

字符集
这是我的组件:

Vue.component('todoList', {
props: ['todoObj'],
template: '<tr>' +
'<td><div class="round"><input id="todoObj.id" type="checkbox" v-on:click="toggle" v-model="todoObj.done" /><label for="todoObj.id"></label></div></td>' +
'<td class="textTodo">{{todoObj.description}}</td>' +
'<td><button v-on:click="deleteTodo" class="btn-xs btn-danger">delete</button></td>' +
'</tr>',


我的复选框也不起作用。它们看起来很好,但是当我点击它们时,它们不会切换,它们只在检查表的第一行时才有React。为什么?

clj7thdc

clj7thdc1#

由于DOM模板解析注意事项,您的表可能无法正确呈现。请尝试以下操作:

<table class="table-responsive">
  <tr
    v-for="todo in todos"
    is="todo-list"
    :todo-obj="todo"
    :key="todo.id"
    @usun="deleteTod"
  ></tr>
</table>

字符集
另外,你绑定了两次todoObj(我在上面的代码中删除了.sync)。
至于复选框的问题,我不能完全确定问题出在哪里,特别是因为您没有提供组件的代码(fiddle就很好了)。为什么你有@toggle * 和 * v-model?你不能只使用v-model吗?你还忘记了v-bind到复选框的id属性:id="todoObj.id"(无论如何都有必要吗?)。

fkvaft9z

fkvaft9z2#

我将回答这个已经回答过的问题,因为我花了几个小时试图弄清楚为什么我的组件(基本上是一个表行)在它放置的<table>之前呈现,而不是在我放置它的<table>之内呈现。
而不是像你直观地对大多数组件那样做:

<table>
    <my-table-row-component v-for="row in tablerows"></my-table-row-component>
</table>

字符集
你需要像这样使用你的组件:

<table>
    <tr is="vue:my-table-row-component" v-for="row in tablerows"></tr>
</table>


这将在<table>标记中呈现表格行组件。
这在vuejs.org文档的“组件基础-元素放置限制”底部有介绍

相关问题