zoukankan      html  css  js  c++  java
  • tmtTable设计说明文档

    文件链接:tmt-table.js

    BOSS后台项目用到最多的就是列表页,所以把列表页做成通用组件,可以大大提高开发效率。

    因为列表可能有不同的样式,所以在实例化组件时可以传值控制样式,用这种方式:

    组件内部接收这个参数对象,判断使用哪套样式,如果不传参,则使用默认的'default'样式。

    本组件有3个属性值,分别为:

    props: { 
      //表格的基本参数和设置
      options: { required: true, default: {} }, 
      //返回当前点击行的所有原始数据
      rowdata: { required: false, default: {} }, 
      //当前的页数
      pagination: { required: false, default: 0 } 
    },

    组件的data属性有三个变量:

    data() { 
      return { 
        //分页总数
        pageNum: 0,
        //当前页数
        currentPage: 0,
        //样式加载结束才显示HTML页面,防止样式混乱
        isShow: false
     } 
    },

    当组件内部代码全部编译完成时,把依赖的bootstrap引入到页面中,并在css加载完毕后显示页面:

    ready() {
      var __this = this; 
      //插入依赖的CSS文件 
      var link = $('<link rel="stylesheet" type="text/css" href="http://h5cdn.wisdomtmt.com/common/util/tmt-table/tmt-table-theme/bootstrap.min.css"/>'); 
      $('head').append(link); 
      //当CSS加载完成才显示组件 
      var judgeCssLoad = setInterval(function() { 
        if (link[0].sheet) {
           __this.isShow = true; clearInterval(judgeCssLoad); 
        } 
      }, 30) 
    
    //处理父组件传入的数据
      __this.loadData(); 
    }

    组件内部定义了两个方法:

    changePageloadData;

    changePage(currentPage) { 
      //父组件和pagination是双向绑定,所以改变pagination的值,父组件可以接收到
      this.$set("pagination", currentPage); 
      this.currentPage = currentPage; 
    }
    loadData() { 
      var __this = this; 
      //判断外部的data数据是否传入,进行分页初始化和绑定事件 
      var tableData = __this.options.data; 
      //因为父组件传入的数据有延迟,所以设定200ms的延迟执行
      setTimeout(function() { 
        //拿到父组件传入的数据才执行分页和绑定事件
        if (tableData) { 
          //初始化分页
          __this.pageNum = Math.ceil(tableData.total_num / tableData.limit); 
          //绑定事件,通过jQuery的on方法进行绑定
          if (__this.options.fn) { 
            var fn = __this.options.fn, 
                keys = Object.keys(fn); 
            for (let i = 0; i < keys.length; i++) { 
                var tempArr = keys[i].split(' '); 
                //先解绑再绑定,防止重复绑定
                $(tempArr[0]).unbind(); 
                $(tempArr[0]).on(tempArr[1], function() {
                setTimeout(fn[keys[i]], 50); 
                }); 
              } 
            } 
          } else { 
          //如果没有拿到数据,就再执行一遍
            __this.loadData(); 
          } 
        }, 200); }

    组件的watch属性监听了两个变量:

    optionspagination:

    watch: { 
      //监听当options发生变化时,重载数据
      'options': {
         handler: function(val, oldVal) { 
          this.loadData(); 
        }, 
        deep: true 
      }, 
      //当前页发生改变时,通知父组件
      'pagination': {
         handler: function(val, oldVal) { 
          this.currentPage = val; 
          } 
        } 
    }

    最后把tmtTable组件注册到Vue的全局变量上,并在控制台通知组件加载完毕:

    Vue.component('tmtTable', tmt_table); 
    console.log('tmtTable component ready!');

     

  • 相关阅读:
    Linux常见命令
    关于SpringBoot开发微信模板推送
    SpringBoot使用ModelAndView时配置视图解析器
    自定义SpringBoot控制台输出的图案
    关于Maven整合SSM项目中报错Invalid bound statement (not found):的问题解决
    Mysql 经典案例总结(学习之前需要有Mysql基础)01
    认识Java Spring 框架
    设计模式1--简单工厂
    C#中扩展方法
    苹果MDM原理和实现过程
  • 原文地址:https://www.cnblogs.com/chinajins/p/6171176.html
Copyright © 2011-2022 走看看