使用vue的v-for生成table并给table加上序号的实例代码


Posted in Javascript onOctober 27, 2017

现在有一个使用mybatis的分页插件生成的table,table中数据是通过vue获得的 , 前台显示使用<tr v-for="item in items">

后台vue获取数据使用分页插件进行查询然后使用回调,将结果返回给vue的一个model

/**
 * 分页控件加载
 * @param data
 */
function aspnetPagerInfoIM(pageDataShow,pageModule,resource, modelCallBack) {
  var pageDataShow = $("#"+pageDataShow);
  var pageModule = $("#"+pageModule);
  pageDataShow.empty();
  pageModule.empty();
  resource.get({
    page: '0'
  }).then(function(response){
    initLaypage(pageDataShow,pageModule,response.data, resource, modelCallBack);
    modelCallBack(response.data.content);
  })
}
/**
 * 初始化分页组件
 * @param page 查询出来的数据包括分页信息
 * @param resource vue的resource对象
 * @param modelCallBack 每次页面跳转回调方法 modelCallBack(response.data.content)
 */
function initLaypage(pageDataShow,pageModule,page, resource, modelCallBack) {
  var singleInvoke = false
  laypage({
    cont : pageModule,
    pages : page.totalPages, //总页数
    skin : '#fff', //加载内置皮肤
    skip: true,    //是否开启跳页
    groups : 5,    //连续显示分页数
    hash : true,   //开启hash
    jump : function(obj) {
      if(!singleInvoke) {
        singleInvoke = true;
      }else {
        resource.get({
          page: obj.curr -1
        }).then(function(response){
          modelCallBack(response.data.content);
        })
      }
      pageDataShow.empty();
      if(page.totalElements>0){
        $("<p>共"+page.totalElements+"条记录,"
          +"每页"+page.size+"条,"
          +"当前第 "+obj.curr +"/"+page.totalPages+"页"
          +"</p>").appendTo(pageDataShow);
      }
    }
  });
}

需求是:给生成的table添加序号

刚开始使用js的函数

function rownum(){
//首先拿到table中tr的数量 得到一共多少条数据
  var len = $("#tableId table tbody tr").length;
  //使用循环给每条数据加上序号
  for(var i = 1;i<len+1;i++){
    $('#tableId table tr:eq('+i+') span:first').text(i);
  }
}

将上面的方法放在点击生成table的事件上 , 可以显示序号,接着点击分页的下一页或者页数,跳转到下一页的时候,序号消失了,

很自然的想到在点击下一页后也应该有添加序号的操作,于是找到显示下一页数据的方法,加上上面的js方法,结果没有生效,

个人觉得是查出数据后rownum方法在dom没刷新前进行了添加,然后dom更新后,序号消失了

通过查找资料最终像下面这样使用解决了问题 , 在每个出现分页查询的地方都加上 Vue.nextTick(function(){})方法

var model={
object[]
}
spnetPagerInfoIM(electricalPageDataShow, electricalPageModule, electricalResource, function(result) {
  model.object = result;
  Vue.nextTick(function(){
    rownum();
  });
});

一、vm.$nextTick( [callback] )

二、Vue.nextTick( [callback, context] )

三、异步更新队列

 实例

<ul id="demo">
  <li v-for="item in list">{{item}}</div>
</ul>
new Vue({
  el:'#demo',
  data:{
    list=[0,1,2,3,4,5,6,7,8,9,10]
  },
  methods:{
    push:function(){
      this.list.push(11);
      this.nextTick(function(){
        alert('数据已经更新')
      });
      this.$nextTick(function(){
        alert('v-for渲染已经完成')
      })
    }
  }})

或者

this.$http.post(apiUrl)
  .then((response) => {
  if (response.data.success) {
    this.topFocus.data = response.data.data;
    this.$nextTick(function(){
          //渲染完毕
    });
    }
  }).catch(function(response) {
    console.log(response);
  });

什么时候需要用的Vue.nextTick()

你在Vue生命周期的created()钩子函数进行的DOM操作一定要放在Vue.nextTick()的回调函数中。原因是什么呢,原因是在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进Vue.nextTick()的回调函数中。与之对应的就是mounted钩子函数,因为该钩子函数执行时所有的DOM挂载和渲染都已完成,此时在该钩子函数中进行任何DOM操作都不会有问题 。

在数据变化后要执行的某个操作,而这个操作需要使用随数据改变而改变的DOM结构的时候,这个操作都应该放进Vue.nextTick()的回调函数中。

Vue是异步执行dom更新的,一旦观察到数据变化,Vue就会开启一个队列,然后把在同一个事件循环 (event loop) 当中观察到数据变化的 watcher 推送进这个队列。如果这个watcher被触发多次,只会被推送到队列一次。这种缓冲行为可以有效的去掉重复数据造成的不必要的计算和DOm操作。而在下一个事件循环时,Vue会清空队列,并进行必要的DOM更新。

当你设置

vm.someData = 'new value',DOM

并不会马上更新,而是在异步队列被清除,也就是下一个事件循环开始时执行更新时才会进行必要的DOM更新。如果此时你想要根据更新的 DOM

状态去做某些事情,就会出现问题。。为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用

Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。

总结:

* `Vue.nextTick(callback)`,当数据发生变化,更新后执行回调。
* `Vue.$nextTick(callback)`,当dom发生变化,更新后执行的回调。

以上所述是小编给大家介绍的使用vue的v-for生成table并给table加上序号,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
DD_belatedPNG,IE6下PNG透明解决方案(国外)
Dec 06 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
用JS实现图片轮播效果代码(一)
Jun 26 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
Nov 05 Javascript
jQuery 常见小例汇总
Dec 14 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
May 11 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
Dec 08 Javascript
详解webpack4升级指南以及从webpack3.x迁移
Jun 12 Javascript
JavaScript两种计时器的实例讲解
Jan 31 Javascript
JavaScript计算正方形面积
Nov 26 Javascript
vue插槽slot的简单理解与用法实例分析
Mar 14 Javascript
vue实现购物车案例
May 30 Javascript
javascript浏览器用户代理检测脚本实现方法
Oct 27 #Javascript
vue中的event bus非父子组件通信解析
Oct 27 #Javascript
基于javascript中的typeof和类型判断(详解)
Oct 27 #Javascript
webpack配置之后端渲染详解
Oct 26 #Javascript
jquery使用iscorll实现上拉、下拉加载刷新
Oct 26 #jQuery
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
Oct 26 #Javascript
node文字生成图片的示例代码
Oct 26 #Javascript
You might like
一段防盗连的PHP代码
2006/12/06 PHP
PHP 输出缓存详解
2009/06/20 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
js cookies实现简单统计访问次数
2009/11/24 Javascript
IE本地存储userdata的一个bug说明
2010/07/01 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
js简单实现表单中点击按钮动态增加输入框数量的方法
2015/08/18 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
js实现关闭网页出现是否离开提示
2017/12/07 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
浅谈关于JS下大批量异步任务按顺序执行解决方案一点思考
2019/01/08 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
[03:39]这就是刀塔,我们是冠军!燃情短片讲述我们的DOTA故事
2019/07/02 DOTA
Python获取运行目录与当前脚本目录的方法
2015/06/01 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
PyTorch中Tensor的数据统计示例
2020/02/17 Python
HTML5拍照和摄像机功能实战详解
2019/01/24 HTML / CSS
西雅图的买手店:Totokaelo
2019/10/19 全球购物
省三好学生申请材料
2014/01/22 职场文书
销售经理工作职责
2014/02/03 职场文书
家长会主持词
2014/03/26 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
会议主持词开场白
2015/05/28 职场文书
Golang 对es的操作实例
2022/04/20 Golang