角头固定 [英] Angular Headers Fixed

查看:190
本文介绍了角头固定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图让我的桌子角页面上有固定的页眉和页脚。

 <表类=表表边框的表格条纹表悬停固定头>
  <&THEAD GT;
      &所述; TR>
          <第i个姓名和LT; /第i
          <第i度< /第i
          <第i ID和LT; /第i
      < / TR>
  < / THEAD>
  <&TBODY GT;
      < TR类=信息NG-重复=项ctrl.items跟踪由$指数>
          &所述; TD>
              <输入类型=复选框/>
              &所述a取代; {{item.displayName}}&下; / A>
          < / TD>
          &所述; TD>
              {{item.marketValue}}
          < / TD>
          &所述; TD>
              {{item.positions}}
          < / TD>
      < / TR>
  < / TBODY>
  <&TFOOT GT;
      &所述; TR>
          < TD>名称和LT; / TD>
          < TD>度< / TD>
          < TD> ID和LT; / TD>
      < / TR>
  < / TFOOT>
< /表>

我有我的角桌对plunker 演示在这里。我使用的是安固固定头表插件,但该表拒绝有固定的头。关于如何解决它的任何想法?


解决方案

我认为你缺少添加表高度=。这里是工作演示。 https://plnkr.co/edit/BdiQzYxVyPdFXU9TI44t?p=$p$pview

\r
\r

/ **\r
 * AngularJS固定头滚动表指示\r
 * @author贾森Watmore< jason@pointblankdevelopment.com.au> (http://jasonwatmore.com)\r
 * @version 1.2.0\r
 * /\r
(函数(){\r
    角\r
        .module('anguFixedHeaderTable',[])\r
        .directive('fixedHeader',fixedHeader);\r
\r
    。fixedHeader $注射='$超时'];\r
\r
    功能fixedHeader($超时){\r
        返回{\r
            限制:'A',\r
            链接:链接\r
        };\r
\r
        功能链接($范围,$ ELEM,$ ATTRS,$​​ CTRL){\r
            变种ELEM = $ ELEM [0];\r
\r
            //等待数据加载,然后变换表\r
            $范围。$腕表(tableDataLoaded,功能(isTableDataLoaded){\r
                如果(isTableDataLoaded){\r
                    transformTable();\r
                }\r
            });\r
\r
            功能tableDataLoaded(){\r
                //当数据被装载在TBODY第一小区存在,但不具有宽度\r
                //直到表被变换后\r
                VAR firstCell = elem.querySelector('TBODY TR:第一个孩子TD:第一孩子');\r
                返回firstCell&放大器;&安培; !firstCell.style.width;\r
            }\r
\r
            功能transformTable(){\r
                //重新设置显示风格所以下面测量时列宽是正确的\r
                angular.element(elem.querySelectorAll('THEAD,TBODY,TFOOT'))的CSS('显示器','')。\r
\r
                //包装在$超时给表有机会完成呈现\r
                $超时(函数(){\r
                    //组列的宽度\r
                    angular.forEach(elem.querySelectorAll('TR:第一胎日),功能(thElem,I){\r
\r
                        VAR tdElems = elem.querySelector('TBODY TR:第一胎TD:第n个孩子('+(I + 1)+')');\r
                        VAR tfElems = elem.querySelector('TFOOT TR:第一胎TD:第n个孩子('+(I + 1)+')');\r
\r
                        VAR columnWidth时= tdElems? tdElems.offsetWidth:thElem.offsetWidth;\r
                        如果(tdElems){\r
                            tdElems.style.width = columnWidth时+'像素';\r
                        }\r
                        如果(thElem){\r
                            thElem.style.width = columnWidth时+'像素';\r
                        }\r
                        如果(tfElems){\r
                            tfElems.style.width = columnWidth时+'像素';\r
                        }\r
                    });\r
\r
                    //在THEAD和TBODY一套CSS样式\r
                    。angular.element(elem.querySelectorAll('THEAD,TFOOT'))的CSS('显示器','块');\r
\r
                    angular.element(elem.querySelectorAll('TBODY'))。CSS({\r
                        '显示':'堵',\r
                        高度:$ attrs.tableHeight || '继承',\r
                        '溢出':'自动'\r
                    });\r
\r
                    //通过滚动条的宽度减少最后一列的宽度\r
                    VAR TBODY = elem.querySelector('TBODY');\r
                    VAR = scrollbarwidth设定tbody.offsetWidth - tbody.clientWidth;\r
                    如果(scrollbarwidth设定大于0){\r
                        //因为某些原因被2px的线条一切行动更好地修剪宽度\r
                        scrollbarwidth设定 - = 2;\r
                        VAR lastColumn = elem.querySelector('TBODY TR:第一胎TD:最后一个孩子');\r
                        lastColumn.style.width =(lastColumn.offsetWidth - scrollbarwidth设定)+'像素';\r
                    }\r
                });\r
            }\r
        }\r
    }\r
})();\r
\r
VAR应用= angular.module('对myApp',['anguFixedHeaderTable'])\r
.controller('DemoController',函数($范围){\r
    $ scope.products = [\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
      {\r
        显示名:PROD1,\r
        marketValue:'100',\r
        的位置:'1'\r
      },\r
    ];\r
});

\r

<!DOCTYPE HTML>\r
< HTML NG-应用=对myApp>\r
\r
  < HEAD>\r
    <间的charset =UTF-8/>\r
    <标题> AngularJS Plunker< /标题>\r
    <脚本>的document.write('<基本href =+ document.location +'/>');< / SCRIPT>\r
    <链接rel =stylesheet属性HREF =style.css文件/>\r
    &所述;脚本数据需要=angular.js@1.4.xSRC =的https://$c$c.angularjs.org/1.4.9/angular.js数据semver =1.4.9&GT ;< / SCRIPT>\r
    &所述; SCRIPT SRC =app.js>&下; /脚本>\r
  < /头>\r
\r
  <机身NG控制器=DemoController>\r
<表表高度=100px的阶级=表表边框的表格条纹表悬停固定头>\r
  <&THEAD GT;\r
      &所述; TR>\r
          <第i个姓名和LT; /第i\r
          <第i度< /第i\r
          <第i ID和LT; /第i\r
      < / TR>\r
  < / THEAD>\r
  <&TBODY GT;\r
      < TR类=信息NG-重复=项产品通过跟踪指数$>\r
          &所述; TD>\r
              <输入类型=复选框/>\r
              &所述a取代; {{item.displayName}}&下; / A>\r
          < / TD>\r
          &所述; TD>\r
              {{item.marketValue}}\r
          < / TD>\r
          &所述; TD>\r
              {{item.positions}}\r
          < / TD>\r
      < / TR>\r
  < / TBODY>\r
  <&TFOOT GT;\r
      &所述; TR>\r
          < TD>名称和LT; / TD>\r
          < TD>度< / TD>\r
          < TD> ID和LT; / TD>\r
      < / TR>\r
  < / TFOOT>\r
< /表>\r
  < /身体GT;\r
\r
< / HTML>

\r

\r
\r

I am trying to make a table on my angular page with fixed headers and footers.

<table class="table table-bordered table-striped table-hover" fixed-header>
  <thead>
      <tr>
          <th>Name</th>
          <th>Amount</th>
          <th>Id</th>
      </tr>
  </thead>
  <tbody>
      <tr class="info" ng-repeat="item in ctrl.items track by $index">
          <td>
              <input type="checkbox"/>
              <a>{{item.displayName}}</a>
          </td>
          <td>
              {{item.marketValue}}
          </td>
          <td>
              {{item.positions}}
          </td>
      </tr>
  </tbody>
  <tfoot>
      <tr>
          <td>Name</td>
          <td>Amount</td>
          <td>Id</td>
      </tr>
  </tfoot>
</table>

I have a demo of my angular table here on plunker. I'm using the angu-fixed-header-table plugin but the table refuses to have fixed headers. Any ideas on how to fix it?

解决方案

I think you are missing to add table-height="". Here is the working demo. https://plnkr.co/edit/BdiQzYxVyPdFXU9TI44t?p=preview

/**
 * AngularJS fixed header scrollable table directive
 * @author Jason Watmore <jason@pointblankdevelopment.com.au> (http://jasonwatmore.com)
 * @version 1.2.0
 */
(function () {
    angular
        .module('anguFixedHeaderTable', [])
        .directive('fixedHeader', fixedHeader);

    fixedHeader.$inject = ['$timeout'];

    function fixedHeader($timeout) {
        return {
            restrict: 'A',
            link: link
        };

        function link($scope, $elem, $attrs, $ctrl) {
            var elem = $elem[0];

            // wait for data to load and then transform the table
            $scope.$watch(tableDataLoaded, function(isTableDataLoaded) {
                if (isTableDataLoaded) {
                    transformTable();
                }
            });

            function tableDataLoaded() {
                // first cell in the tbody exists when data is loaded but doesn't have a width
                // until after the table is transformed
                var firstCell = elem.querySelector('tbody tr:first-child td:first-child');
                return firstCell && !firstCell.style.width;
            }

            function transformTable() {
                // reset display styles so column widths are correct when measured below
                angular.element(elem.querySelectorAll('thead, tbody, tfoot')).css('display', '');

                // wrap in $timeout to give table a chance to finish rendering
                $timeout(function () {
                    // set widths of columns
                    angular.forEach(elem.querySelectorAll('tr:first-child th'), function (thElem, i) {

                        var tdElems = elem.querySelector('tbody tr:first-child td:nth-child(' + (i + 1) + ')');
                        var tfElems = elem.querySelector('tfoot tr:first-child td:nth-child(' + (i + 1) + ')');

                        var columnWidth = tdElems ? tdElems.offsetWidth : thElem.offsetWidth;
                        if (tdElems) {
                            tdElems.style.width = columnWidth + 'px';
                        }
                        if (thElem) {
                            thElem.style.width = columnWidth + 'px';
                        }
                        if (tfElems) {
                            tfElems.style.width = columnWidth + 'px';
                        }
                    });

                    // set css styles on thead and tbody
                    angular.element(elem.querySelectorAll('thead, tfoot')).css('display', 'block');

                    angular.element(elem.querySelectorAll('tbody')).css({
                        'display': 'block',
                        'height': $attrs.tableHeight || 'inherit',
                        'overflow': 'auto'
                    });

                    // reduce width of last column by width of scrollbar
                    var tbody = elem.querySelector('tbody');
                    var scrollBarWidth = tbody.offsetWidth - tbody.clientWidth;
                    if (scrollBarWidth > 0) {
                        // for some reason trimming the width by 2px lines everything up better
                        scrollBarWidth -= 2;
                        var lastColumn = elem.querySelector('tbody tr:first-child td:last-child');
                        lastColumn.style.width = (lastColumn.offsetWidth - scrollBarWidth) + 'px';
                    }
                });
            }
        }
    }
})();

var app = angular.module('myApp', ['anguFixedHeaderTable'])
.controller('DemoController', function($scope) {
    $scope.products = [
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
      {
        displayName: 'Prod1',
        marketValue: '100',
        positions:'1'
      },
    ];
});

<!DOCTYPE html>
<html ng-app="myApp">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script data-require="angular.js@1.4.x" src="https://code.angularjs.org/1.4.9/angular.js" data-semver="1.4.9"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="DemoController">
<table table-height="100px" class="table table-bordered table-striped table-hover" fixed-header>
  <thead>
      <tr>
          <th>Name</th>
          <th>Amount</th>
          <th>Id</th>
      </tr>
  </thead>
  <tbody>
      <tr class="info" ng-repeat="item in products track by $index">
          <td>
              <input type="checkbox"/>
              <a>{{item.displayName}}</a>
          </td>
          <td>
              {{item.marketValue}}
          </td>
          <td>
              {{item.positions}}
          </td>
      </tr>
  </tbody>
  <tfoot>
      <tr>
          <td>Name</td>
          <td>Amount</td>
          <td>Id</td>
      </tr>
  </tfoot>
</table>
  </body>

</html>

这篇关于角头固定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆