vue+datatable+vue-resource动态获取jsonp数据
vue+datatable+vue-resource动态获取jsonp数据
一、总结
一句话总结:
1、模板表:弄一个模板表,模板表用于一直动态获取vue更新的数据
2、真实显示数据的表是模板表的copy(id动态变化),用datatable初始化这个table即可显示数据
3、删表加表:vue-resource动态获取jsonp数据,删除旧的显示数据的表(注意清datatable),根据模板表用datatable初始化新表即可
1、动态刷新datatable的思路是什么?
1、模板表:弄一个模板表,模板表用于一直动态获取vue更新的数据
2、真实显示数据的表是模板表的copy(id动态变化),用datatable初始化这个table即可显示数据
3、删表加表:vue-resource动态获取jsonp数据,删除旧的显示数据的表(注意清datatable),根据模板表用datatable初始化新表即可
2、datatable的各个方法的api网址(https://datatables.net/reference/api/)启示?
官网是一定可以找到非常详细的api文档的,就是需要多点点
怎么使用官方的英文文档说的很详细,要仔细看(也要注意多配合百度)
3、如何在vue的生命周期函数updated里面监控某一个vue变量的变化而执行某些操作(比如数据更新就删表加表,否则不操作)?
新增一个监控这个变量a变化的变量b,在updated里面根据变量b的值进行操作
updated:function(){ if(this.is_lists_change){ //console.log('lists数据更新了!'); this.is_lists_change=false; //1、删除原来的实际显示数据的表格部分 let id_str='num_datatable_box_'+this.query_times; if($('#'+id_str).hasClass('dataTable')){ let old_datatable = $('#'+id_str).dataTable(); // old_datatable.destroy(); old_datatable.fnDestroy(); //还原初始化了的datatable $('#'+id_str).empty(); // empty in case the columns change } let id_str_wrapper=id_str+'_wrapper'; $('#num_datatable_box_real').html(''); //2、添加新的显示数据的表格部分 this.query_times++; let new_id_str='num_datatable_box_'+this.query_times; let model_table=$('#num_datatable_box_model').html(); //替换id let table=model_table.replace(/num_datatable_box_model_table/g,new_id_str); $('#num_datatable_box_real').append(table); //table的jquery对象 let table_jquery=$('#'+new_id_str); table_jquery.show(); table_jquery.dataTable(); } },
4、vue和jquery配合使用启示?
怎么方便怎么来,怎么能实现最好的效果怎么来
updated:function(){ if(this.is_lists_change){ //console.log('lists数据更新了!'); this.is_lists_change=false; //1、删除原来的实际显示数据的表格部分 let id_str='num_datatable_box_'+this.query_times; if($('#'+id_str).hasClass('dataTable')){ let old_datatable = $('#'+id_str).dataTable(); // old_datatable.destroy(); old_datatable.fnDestroy(); //还原初始化了的datatable $('#'+id_str).empty(); // empty in case the columns change } let id_str_wrapper=id_str+'_wrapper'; $('#num_datatable_box_real').html(''); //2、添加新的显示数据的表格部分 this.query_times++; let new_id_str='num_datatable_box_'+this.query_times; let model_table=$('#num_datatable_box_model').html(); //替换id let table=model_table.replace(/num_datatable_box_model_table/g,new_id_str); $('#num_datatable_box_real').append(table); //table的jquery对象 let table_jquery=$('#'+new_id_str); table_jquery.show(); table_jquery.dataTable(); } },
5、datatable的destory操作的效果和实现(删除table的时候要进行这个操作,避免内存泄漏)?
效果:去除表上面的'dataTable'的class:Restore the tables in the current context to its original state in the DOM by removing all of DataTables enhancements
实现:是fnDestroy()方法而不是destroy()方法,可能和datatable的版本有关
destroy:Restore the tables in the current context to its original state in the DOM by removing all of DataTables enhancements, alterations to the DOM structure of the table and event listeners.
let id_str='num_datatable_box_'+this.query_times; if($('#'+id_str).hasClass('dataTable')){ let old_datatable = $('#'+id_str).dataTable(); // old_datatable.destroy(); old_datatable.fnDestroy(); //还原初始化了的datatable $('#'+id_str).empty(); // empty in case the columns change }
6、vue的mounted函数会在vue数据更新的时候执行么?
不会,只在页面加载的时候执行一次
7、vue导致的闪烁问题如何快速高效解决?
开始隐藏,在mounted函数中设置为显示就好
8、vue-resource获取jsonp数据实例?
this.$http.jsonp(url).then(function (result) {
this.$http.jsonp(url).then(function (result) { layer.open({ content: '获取数据成功!' ,skin: 'msg' ,time: 2 //2秒后自动关闭 }); // 通过 result.body 拿到服务器返回的成功的数据 this.is_get_num=false; this.lists=result.body.data.data; this.is_lists_change=true; //console.log(result.body.data.data) },response => { // error callback this.is_get_num=false; layer.open({ content: '获取数据失败!' ,skin: 'msg' ,time: 2 //2秒后自动关闭 }); })
9、datatable的最基本使用?
直接初始化,不必进行其它操作,也不用关心分页样式:$('#'+id_str).dataTable();
二、vue+datatable+vue-resource动态获取jsonp数据
1、效果图
2、代码
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>查找QQ号码</title> 8 9 <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/> 10 <link rel="stylesheet" type="text/css" href="fry_components/font-awesome/css/font-awesome.min.css"/> 11 <script type="text/javascript" src='js/jquery.min.js'></script> 12 <script type="text/javascript" src='js/bootstrap.min.js'></script> 13 <script type="text/javascript" src='js/vue.min.js'></script> 14 <script type="text/javascript" src='js/vue-resource.min.js'></script> 15 <script type="text/javascript" src='fry_components/layer_mobile_2.0/layer.js'></script> 16 <!-- DataTables --> 17 <link rel="stylesheet" href="fry_components/datatables.net-bs/css/dataTables.bootstrap.min.css"> 18 <script src="fry_components/datatables.net/js/jquery.dataTables.min.js"></script> 19 <script src="fry_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script> 20 </head> 21 <body> 22 <div id="my_main_part" > 23 <div class="panel panel-info" style="margin:20px;"> 24 <!-- 头部 --> 25 <div class="panel-heading"> 26 <h1 style="display: inline-block;">查找QQ号码</h1> 27 <span>号码总数 28 <span class="label label-warning" >{{lists.length}}</span> 29 </span> 30 </div> 31 <!-- 内容 --> 32 <div class="panel-body"> 33 <!--查询按钮--> 34 <div id="search_num_input_part" class="input-group" style="display: none;"> 35 <input class="form-control" v-model="year" placeholder="请输入要查询的num" type="text"/> 36 <span class="input-group-btn"> 37 <button v-if="!is_get_num" class="btn btn-primary" @click="getNum()">查询</button> 38 <button v-else class="btn btn-primary" ><i class="fa fa-fw fa-spinner fa-spin"></i></button> 39 </span> 40 </div> 41 42 <!--数据显示区域--> 43 <div id="fry_qq_data_part" style="margin-top: 30px;border: 1px dashed #eee;padding: 5px;"> 44 <!--模板表--> 45 <div id="num_datatable_box_model"> 46 <table id="num_datatable_box_model_table" class="table table-striped" style="display: none;"> 47 <thead> 48 <tr> 49 <th>编号</th> 50 <th>qq号</th> 51 </tr> 52 </thead> 53 <tbody> 54 <tr v-for="(list,index) in lists"> 55 <td>{{index+1}}</td> 56 <td>{{list.num}}</td> 57 </tr> 58 </tbody> 59 </table> 60 </div> 61 <div id="num_datatable_box_real"> 62 <table :id="'num_datatable_box_'+query_times" class="table table-striped" style=""> 63 <thead> 64 <tr> 65 <th>编号</th> 66 <th>qq号</th> 67 </tr> 68 </thead> 69 <tbody> 70 <tr v-for="(list,index) in lists"> 71 <td>{{index+1}}</td> 72 <td>{{list.num}}</td> 73 </tr> 74 </tbody> 75 </table> 76 </div> 77 78 </div> 79 </div> 80 81 </div> 82 83 </div> 84 85 <script> 86 new Vue({ 87 el:'#my_main_part', 88 89 updated:function(){ 90 if(this.is_lists_change){ 91 //console.log('lists数据更新了!'); 92 this.is_lists_change=false; 93 94 //1、删除原来的实际显示数据的表格部分 95 let id_str='num_datatable_box_'+this.query_times; 96 if($('#'+id_str).hasClass('dataTable')){ 97 let old_datatable = $('#'+id_str).dataTable(); 98 // old_datatable.destroy(); 99 old_datatable.fnDestroy(); //还原初始化了的datatable 100 $('#'+id_str).empty(); // empty in case the columns change 101 } 102 let id_str_wrapper=id_str+'_wrapper'; 103 $('#num_datatable_box_real').html(''); 104 105 106 //2、添加新的显示数据的表格部分 107 this.query_times++; 108 let new_id_str='num_datatable_box_'+this.query_times; 109 let model_table=$('#num_datatable_box_model').html(); 110 //替换id 111 let table=model_table.replace(/num_datatable_box_model_table/g,new_id_str); 112 $('#num_datatable_box_real').append(table); 113 //table的jquery对象 114 let table_jquery=$('#'+new_id_str); 115 table_jquery.show(); 116 table_jquery.dataTable(); 117 118 } 119 }, 120 mounted:function(){ 121 let id_str='num_datatable_box_'+this.query_times; 122 let datatable=$('#'+id_str).dataTable(); 123 124 //加载完成再显示闪烁区域 125 $('#search_num_input_part').show(); 126 //datatable.fnDestroy(); 127 128 }, 129 data:{ 130 year:'', 131 is_get_num:false, 132 query_times:1, 133 is_lists_change:false, 134 lists:[ 135 136 ], 137 }, 138 methods:{ //方法 139 getNum:function () { 140 let url='---------------------------------------------------'; 141 let num_str='num='+this.year; 142 //console.log(num_str); 143 url=url.replace('num=2008',num_str); 144 //console.log(url); 145 this.is_get_num=true; 146 this.$http.jsonp(url).then(function (result) { 147 layer.open({ 148 content: '获取数据成功!' 149 ,skin: 'msg' 150 ,time: 2 //2秒后自动关闭 151 }); 152 // 通过 result.body 拿到服务器返回的成功的数据 153 this.is_get_num=false; 154 this.lists=result.body.data.data; 155 this.is_lists_change=true; 156 //console.log(result.body.data.data) 157 158 },response => { 159 // error callback 160 this.is_get_num=false; 161 layer.open({ 162 content: '获取数据失败!' 163 ,skin: 'msg' 164 ,time: 2 //2秒后自动关闭 165 }); 166 }) 167 } 168 }, 169 }) 170 </script> 171 </body> 172 </html>
版权申明:欢迎转载,但请注明出处
一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。
在校每年国奖、每年专业第一,加拿大留学,先后工作于华东师范大学和香港教育大学。
2024-10-30:27岁,宅加太忙,特此在网上找女朋友,坐标上海,非诚勿扰,vx:fan404006308
AI交流资料群:753014672