【问题标题】:How to reload dataTables from VueJS after adding or editing?添加或编辑后如何从 VueJS 重新加载数据表?
【发布时间】:2017-05-16 16:59:09
【问题描述】:

我想知道在通过 api 从数据库加载数据时如何使用相同的方法。在第一次数据表加载正常。但是,当我添加新记录时,我需要使用新记录再次加载我的数据表。这是我的html代码:

<table class="table table-striped table-bordered table-hover" id="dataTables-eventos">
    <thead>
        <tr class="tbheader">
            <th class="text-center">#</th>
            <th>Nome do Evento</th>
            <th class="text-center">Editar</th>
            <th class="text-center">Deletar</th>
        </tr>
    </thead>
    <tbody>
        <tr v-for="ev in eventos" :key="ev.id" track-by="id">
            <td class="text-center">{{ ev.id }}</td>
            <td>{{ ev.name }}</td>
            <td class="text-center"><a class="cursorpointer" v-on:click="showMessage()"><span class="glyphicon glyphicon-edit"></span></a></td>
            <td class="text-center"><span class="glyphicon glyphicon-trash"></span></td>
        </tr>
    </tbody>
</table>

这是我的 VueJS 代码:

mounted() {
  this.getEventos();
},

methods: {
    getEventos() {
        axios.get('/api/eventos')
             .then((response) => {
                this.eventos = response.data})
             .then((response) => {
                $('#dataTables-eventos').DataTable({
                    responsive: true,
                    "aaSorting": [[ 1, "asc" ]],
                    "aoColumnDefs": [
                        { "bSortable" : false, "aTargets": [0,2,3] },
                        { "searchable": false, "aTargets": [2,3] }
                    ],
                    language: {
                        url: '/js/dataTables/localization/pt_BR.json'
                    }
                });
             });
},

addNewRecord() {

    axios.post('/api/eventos', { nomeEvento: this.nomeEvento });

}

那么,在我的数据库中添加(或编辑)新记录后,如何重新加载我的数据表以便查看更改?

【问题讨论】:

  • 能否提供整个 vue 应用的代码?
  • 好像axios.post(...).then(() =&gt; this.getEventos())
  • 嗨@RoyJ,感谢您的回复,但是您的方法不起作用。数据表已经创建,所以我不能再次调用 this.getEventos()。
  • 抱歉,stackoverflow 不允许我添加整个 vue 代码。
  • 也许这会有所帮助? github.com/njleonzhang/vue-data-tables

标签: vue.js


【解决方案1】:

我刚遇到需要将 vue.js 与 datatables.net 一起使用并且必须使用自定义表格 html 的情况。我创建了一个组件,允许我根据需要使用 template/v-for 格式化表格,并在保留 datatables.net 功能的同时刷新数据表。我希望这对未来的人有所帮助......

export default {
    data() {
        return {
            dataTable: null
        }
    },
    props: {
        data: Array
    },
    watch: {
        data() {
            if (this.dataTable) {
                this.dataTable.destroy();
            }

            this.$nextTick(() => {
                this.dataTable = $("#table").DataTable({
                    language: {
                        emptyTable: "No Results Found"
                    }
                });
            });
        }
    }
}

【讨论】:

    【解决方案2】:

    您可以在不重新加载所有数据的情况下执行此操作。 发布到服务器后,只需将 this.nomeEvento 添加到数组 eventos 即可。

    【讨论】:

    • 嗨,我认为这是个好主意,但是在这种情况下,我还需要返回新的事件 ID,因为我在数据表上使用了 ID。你知道我如何使用 Laravel 从 DB 获取最后一个 ID 吗?非常感谢。
    • 嘿,我设法获得了最后插入的 id,但是当我将新事件添加到我的数组时发生了这种情况。
    • 嘿,我设法获取最后插入的 id 并将新事件添加到我的数组中。 this.eventos.push({ id: response.data.evento_id, name: this.nomeEvento });它确实在我的数据表上显示了新事件,但它没有进入正确的位置(我的数据表最初按事件名称排序)。此外,如果最初我有,假设我的 dataTables 上有 20 条记录,它会在表的页脚显示以下内容:显示 20 条记录中的 1 到 10 条。现在,当我添加一条新记录时,它实际上并没有更新数据表。我必须刷新我的屏幕。
    • "this.eventos.push" 将您的项目添加到最后一个位置。如果你愿意,你可以在上传到服务器后随意整理你的数组
    • 好吧,我尝试对表格进行排序,但没有成功。正如我所说,当我添加新行时,dataTables 似乎无法识别它。这就是为什么最初我问如何重新加载数据表。请记住,我使用的是 jQuery dataTables 而不是我自己的表数组!我尝试了不同的命令,例如: $('#ev').DataTable().push({ "id": response.data.evento_id, "name": this.nomeEvento }); $('#ev').DataTable().clear(); $('#ev').DataTable().destroy(); $('#ev').DataTable().draw(false);而且它们似乎都不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多