Vuejs jquery 数据表直接插件无法正常工作

Posted

技术标签:

【中文标题】Vuejs jquery 数据表直接插件无法正常工作【英文标题】:Vuejs jquery datatable direct plugin not working well 【发布时间】:2020-05-18 00:46:17 【问题描述】:

我已经使用npm i dataTables --save 安装了dataTables,现在我可以在我的vue 组件中看到dataTable 格式,问题是搜索栏,分页不能正常工作。看我的截图

我的组件中的代码

<table class="table table-hover" id="myTable">
  <thead>
    <tr>
      <th>Room Name</th>
      <th>Building</th>
      <th>Actions</th>
    </tr>
  </thead>
  <tbody>
    <tr v-for="room in roomsData" :key="room.id">
      <td>room.room_desc</td>
      <td>room.bldg</td>
      <td>
        <a href="#"  data-toggle="modal" data-target="#exampleModal" @click="editModal(room)">
          <i class="fa fa-edit"></i>
        </a>
        <a href="#" @click="deleteRoom(room.id)">
          <i class="fa fa-trash text-red"></i>
        </a>
      </td>
    </tr>
  </tbody>
</table>

方法

myTable()
    $(document).ready( function () 
        $('#myTable').DataTable();
    );


getRoomsDataTable()
  axios.get('/getRoomsDatatable')
    .then((res) => 
        this.roomsData = res.data
    ) .catch((e) => 
        console.log(e)
    )
,

【问题讨论】:

【参考方案1】:

实例化数据表后,不能通过更新 dom 来更新其中的数据。您需要使用数据表 API 来触发使用最新数据的刷新。

mounted 挂钩中,实例化 dataTables 并存储引用。


    ...
    data()  
        return 
            dtRef: null
         
    ,
    mounted() 
        this.dtRef = $('#myTable').DataTable();
    

之后,clear & update axios 返回后的数据。

axios.get('/getRoomsDatatable')
    .then((res) => 
        this.roomsData = res.data
        datatable.clear();
        datatable.rows.add(res.data);
        datatable.draw();
    )

您需要稍微调整一下,确保您的数据表配置为正确显示数据。


或者,在获取数据后,您可以销毁数据表对象并重新实例化它,但在读取样式之前您可能会遇到内容的闪现。

【讨论】:

我没有注意到先生,我在初始化数据表之前正在填写表格。谢谢你【参考方案2】:

尝试只将$('#myTable').DataTable(); 放入挂载的钩子中,如下所示

methods:
 getRoomsDataTable()
           axios.get('/getRoomsDatatable')
                            .then((res) => 
                                this.roomsData = res.data
                            )
                            .catch((e) => 
                                console.log(e)
                            )
      ,
,

mounted()
 $('#myTable').DataTable();

【讨论】:

先生,我得到了相同的输出。为什么会这样? 我认为您缺少添加数据表 css 文件 有人想通了。谢谢老大的回答!

以上是关于Vuejs jquery 数据表直接插件无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

VueJS 2:如何按顺序加载静态 JS?

Vuejs - 啥时候应该初始化 jquery 插件

jQuery 输入滑块插件无法正常运行

VueJS:在 jquery 插件中使用嵌套组件

无法访问 vuejs 中的直接路由

jquery-watermark 插件和 HTML5 电子邮件输入类型无法正常工作