【问题标题】:Custom header template for ui-grid , angularui-grid 的自定义标题模板,角度
【发布时间】:2015-01-05 08:17:22
【问题描述】:

我正在为一个项目尝试angular's ui-grid,但发现很难为我的网格构建自定义模板。当我检查源代码时,我得到了下面的 html 模板,我将它保存到文件 header-template.html 并在配置网格时引用它。

<div class="ui-grid-header">
  <div class="ui-grid-top-panel">
    <div ui-grid-group-panel="" ng-show="grid.options.showGroupPanel" class="">
      <div class="ui-grid-group-panel ng-scope">
        <div ui-t="groupPanel.description" class="description " ng-show="groupings.length == 0">
          Drag a column header here and drop it to group by that column.</div>
        <ul ng-show="groupings.length > 0" class="ngGroupList ">
          <!-- ngRepeat: group in configGroups -->
        </ul>
      </div>
    </div>
    <div class="ui-grid-header-viewport">
      <div class="ui-grid-header-canvas">
         <!--ngRepeat: col in colContainer.renderedColumns track by col.colDef.name -->
        <div class="ui-grid-header-cell clearfix" ng-repeat="col in colContainer.renderedColumns track by col.colDef.name" ui-grid-header-cell="" col="col" render-index="$index" ng-style="$index === 0 &amp;&amp; colContainer.columnStyle($index)">
          <div ng-class="{ 'sortable': sortable }" class="sortable">
            <div class="ui-grid-vertical-bar">&nbsp;</div>
            <div class="ui-grid-cell-contents" col-index="renderIndex">
              <span class="">{{col.colDef.name}}</span>
              <span ui-grid-visible="col.sort.direction" ng-class="{ 'ui-grid-icon-up-dir': col.sort.direction == asc, 'ui-grid-icon-down-dir': col.sort.direction == desc, 'ui-grid-icon-blank': !col.sort.direction }" class="ui-grid-invisible ui-grid-icon-blank">&nbsp;</span>
            </div>
            <!-- ngIf: grid.options.enableColumnMenus && !col.isRowHeader  && col.colDef.enableColumnMenu !== false -->
            <!-- ngRepeat: colFilter in col.filters -->
            <!-- ngIf: filterable -->
            <div ng-if="filterable" class="ui-grid-filter-container" ng-repeat="colFilter in col.filters">
              {{colFilter}}
              <input type="text" class="ui-grid-filter-input" ng-model="colFilter.term" ng-click="$event.stopPropagation()" ng-attr-placeholder="{{colFilter.placeholder || ''}}" placeholder="">
              <div class="ui-grid-filter-button" ng-click="colFilter.term = null">
                <i class="ui-grid-icon-cancel right" ng-show="!!colFilter.term">&nbsp;</i>
                <!-- use !! because angular interprets 'f' as false -->
              </div>
            </div>
            <!-- end ngIf: filterable --><!-- end ngRepeat: colFilter in col.filters -->
          </div>
        </div>
        <!-- end ngRepeat: col in colContainer.renderedColumns track by col.colDef.name -->
      </div>
    </div>
    <div ui-grid-menu="" class=""><!-- ngIf: shown -->
    </div>
  </div>
</div>

我已经通过

指定了gridOptions
   $scope.gridOptions = {
    data: 'gridData',
    enableRowHeaderSelection: false,
    multiSelect: false,
    enableFiltering: true,
    columnDefs: $scope.columnDef,
    enableColumnMenus: false,
    headerTemplate:'views/header-template.html'
  };

但由于某种原因,我不知道为什么,我得到了这个,如图所示。模板再次打印在我尝试构建的模板下方

请帮忙..

【问题讨论】:

  • 你如何定义gridOptions 并且可以将你的代码放入plunker?
  • @elaijuh 你现在能检查一下吗? ?
  • 你到底想为你的标题实现什么?
  • @elaijuh:我实际上是在使用 ui-grid 作为 slick-grid 的替代品,但我想最大限度地保持 slick-grid 的外观和感觉。请参考此 [og-web-www.s3.amazonaws.com/… 。现在,我正在尝试获取带有占位符文本的输入框

标签: angularjs angular-ui-grid


【解决方案1】:

为了获得我想要实现的目标,我必须在网格的 columnDefs 中指定一个 headerCellTemplate(Not headerTemplate),如下所示:

          {
        field: key, displayName: key
        , headerCellTemplate: '<div ng-class="{ \'sortable\': sortable }">' +
      '<div class="ui-grid-vertical-bar">&nbsp;</div>' +
      '<div class="ui-grid-cell-contents" col-index="renderIndex">' +
      '<span ui-grid-visible="col.sort.direction" ng-class="{ \'ui-grid-icon-up-dir\': col.sort.direction == asc, \'ui-grid-icon-down-dir\': col.sort.direction == desc, \'ui-grid-icon-blank\': !col.sort.direction }">' +
      '&nbsp;' +
      '</span>' +
      '</div>' +
      '<div class="ui-grid-column-menu-button" ng-if="grid.options.enableColumnMenus && !col.isRowHeader  && col.colDef.enableColumnMenu !== false" class="ui-grid-column-menu-button" ng-click="toggleMenu($event)">' +
      '<i class="ui-grid-icon-angle-down">&nbsp;</i>' +
      '</div>' +
      '<div ng-if="filterable" class="ui-grid-filter-container" ng-repeat="colFilter in col.filters">' +
      '<input type="text" class="ui-grid-filter-input" ng-model="colFilter.term" ng-attr-placeholder="{{col.displayName || \'\'}}" />' +
      '<div class="ui-grid-filter-button" ng-click="colFilter.term = null">' +
      '<i class="ui-grid-icon-cancel" ng-show="!!colFilter.term">&nbsp;</i>' + <!-- use !! because angular interprets 'f' as false -->
      '</div>' +
      '</div>' +
      '</div>'
      }

因为 ui-grid , headerCellTemplate 附加在 headerTemplate 内部。默认 headerCellTemplate 提供在以下link

谢谢

【讨论】:

    【解决方案2】:

    headerTemplate 将作为&lt;div class="ui-grid-header-viewport"&gt; 的前一个兄弟添加到&lt;div class="ui-grid-top-panel"&gt;,因此您的views/header-template.html 应该只包括:

    <div ui-grid-group-panel="" ng-show="grid.options.showGroupPanel" class="">
      <div class="ui-grid-group-panel ng-scope">
        <div ui-t="groupPanel.description" class="description " ng-show="groupings.length == 0">
           Drag a column header here and drop it to group by that column.
        </div>
        <ul ng-show="groupings.length > 0" class="ngGroupList ">
              <!-- ngRepeat: group in configGroups -->
        </ul>
      </div>
    </div>
    

    参考这个official demo

    【讨论】:

    • @32teeths,抱歉,只需更新官方演示的链接,该演示显示如何使用headerTemplate
    • 对不起,我还是想不通。
    • @32teeths - 没关系,是否可以将您的代码粘贴到 plunker?
    • 我已将所需的代码上传到plnkr.co/edit/KF13JRmAWbuqVBN6Bou2?p=catalogue
    • 你能不能也在那里模拟一些数据
    猜你喜欢
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2018-04-01
    相关资源
    最近更新 更多