正确实现Vue.js + DataTables
我试图实现Vue.js + jQuery的DataTables,但有一些奇怪的事情发生。
在firefox上查看这个小提琴(不在chrome上工作) : http : //jsfiddle.net/chrislandeza/xgv8c01y/
当我改变DataTable的状态时(例如排序,搜索等):
- 列表上新添加的数据消失了
- DOM不读取指令或vue属性
我很确定任何试图混合vue.js +数据表的人都会遇到这个问题。 你做了什么来解决这个问题?
或者是否有一个纯粹的Vue.js脚本/插件,它具有与jquery的DataTable相同(或关闭)的function? (分页,搜索,排序,显示的条目数等)。
这是上面小提琴的代码:
HTML:
Name Age {{ user.name }} {{ user.age }}
JavaScript的:
$(document).ready(function () { var dT = $('#app-datatable').DataTable(); }); var vm = new Vue({ el: '#app', data: { newUser: {}, users: [ {name: 'Chris', age: 1}, {name: 'John', age: 2} ] }, methods:{ addUser: function(){ this.users.push(this.newUser); this.newUser = {}; }, foo: function(user){ console.log(user.name); } } });
任何建议都非常感谢。
要使用Vue正确集成DataTables插件,需要记住以下几点:
-
根据您的示例,您可以使用
var dT = $('#app-datatable').DataTable();
如果已准备好数据并将其呈现给DOM,则初始化DataTables。 如果您没有完全呈现DOM(可能是由于通过延迟的ajax调用填充的数据),则在数据准备好之前无法初始化DataTable。 例如,如果组件中有
fetchData
方法,则可以在履行承诺后初始化DataTable。 -
要在初始化后更新表,可能是由于基础表数据的更改,最好(也许是唯一的方法)是在接收新数据并由Vue写入DOM之前首先销毁表:
var dT = $('#app-datatable').DataTable(); dT.destroy();
然后,一旦数据(在您的情况下,用户数组)已更新,重新初始化DataTable,如下所示:
this.$nextTick(function() { $('#app-datatable').DataTable({ // DataTable options here... }); })
在重新初始化之前,$ nextTick是确保Vue将新数据刷新到DOM所必需的。 如果在初始化DataTable插件之后更新DOM,您将看到表数据,但通常的排序,分页等将不起作用。
-
另一个重点是,在数据集中有一个行id,并在
设置键:
如果没有
track-by
,Vue会在DataTables初始化后将新数据刷新到DOM时抱怨,可能是因为没有找到DataTables支持的DOM元素。
也许你可以使用生命周期钩子,事实上这些奇怪的事情是由操纵DOM的竞争引起的。 在你的vue实例中,添加一个created()钩子然后初始化DataTable,就像下面这样:
var vm = new Vue({ el: '#app', data: { newUser: {}, users: [ {name: 'Chris', age: 1}, {name: 'John', age: 2} ] }, methods:{ addUser: function(){ this.users.push(this.newUser); this.newUser = {}; }, foo: function(user){ console.log(user.name); } }, created(){ this.$nextTick(function() { $('#app-datatable').DataTable(); }) }
});
- 使用ReactJS的Datatables.net在列中呈现ReactJS组件
- 如何使用从Spring MVC发回的JSON对象填充jQuery数据行的行?
- 通过Ajax加载内容后,Bootstrap Datatable不再起作用
- Jquery Datatables:Jquery弹出框不能在函数下工作 – php mysql
- 如何在DataTable中显示加载/处理消息?
- 如何使用jquery dataTables在页面回发后保留表设置
- 允许在DataTables中的`fnServerData`中进行服务器端缓存
- 数据表Bootstrap主题在使用ReactJS时不适用
- 如何从自定义按钮调用Datatable csv按钮