【问题标题】:Ag-Grid header Component adding custom header templatesAg-Grid 标头组件添加自定义标头模板
【发布时间】:2017-07-13 05:22:14
【问题描述】:

我仍在使用 Angular 1.x 和 ag-Grid(非企业版)。

但我正在尝试从 angular ui-bootstrap 添加工具提示。所以我需要为所有标题添加一个属性:“uib-tooltip='headerValue'”

问题是它希望我实现一个全新的组件。但是他们放在 ag-grid 网站上的示例组件非常复杂,并且与默认功能不同。为什么没有一种简单的方法来做这些事情?

为什么要弃用 headerTemplate?

因此,即使我想对默认标题稍作更改,我基本上也需要对所有事情负责。而且我什至没有原始版本的标头组件作为示例代码。

我只想在不涉及排序、字段、菜单等的标题中添加一些新的 HTML。

【问题讨论】:

    标签: angularjs angular-ui-bootstrap ag-grid


    【解决方案1】:

    我知道这是旧的,但是...我当时处于这种确切的情况,我想知道为什么没有提供它...我继续构建自己的,这并不是非常困难。因为我认为有人可能会发现一个默认的标头组件很有用:这是一个本质上是默认的

    请注意,您需要为图标设置很棒的字体,并确保在列选项中使用自定义组件。

        function customHeaderComponent() {
        }
    
        customHeaderComponent.prototype.init = function (agParams) {
            this.agParams = agParams;
            this.eGui = document.createElement('div');
            this.eGui.innerHTML = '' +
                '<span class="customHeaderLabel">' + this.agParams.displayName + '</span> ' +
                '<span class="customSortDownLabel inactive"><i class="fa fa-caret-down""></i> </span>' +
                '<span class="customSortUpLabel inactive"><i class="fa fa-caret-up""></i> </span>'+
                '<span class="customFilterLabel inactive"><i class="fa fa-filter"></i> </span>'+
                '<span class="customHeaderMenuButton"><i class="fa fa-tasks""></i></span>'
            ;
    
            this.eMenuButton = this.eGui.querySelector(".customHeaderMenuButton");
            this.eLabel = this.eGui.querySelector(".customHeaderLabel");
            this.eSortDownButton = this.eGui.querySelector(".customSortDownLabel");
            this.eSortUpButton = this.eGui.querySelector(".customSortUpLabel");
            this.eFilterInd = this.eGui.querySelector(".customFilterLabel");
    
    
            if (this.agParams.enableMenu) {
                this.onMenuClickListener = this.onMenuClick.bind(this);
                this.eMenuButton.addEventListener('click', this.onMenuClickListener);
            } else {
                this.eGui.removeChild(this.eMenuButton);
            }
    
            if (this.agParams.enableSorting) {
                this.eLabel.addEventListener('click', this.changeSort.bind(this));
    
                this.onSortChangedListener = this.onSortChanged.bind(this);
                this.agParams.column.addEventListener('sortChanged', this.onSortChangedListener);
                this.onSortChanged();
            }
            var self = this;
            self.eFilterInd.hidden = !self.agParams.column.isFilterActive();
            this.agParams.column.addEventListener('filterChanged', function() {
                self.eFilterInd.hidden = !self.agParams.column.isFilterActive();
            });
    
        };
    
        customHeaderComponent.prototype.changeSort = function (event) {
            this.agParams.progressSort(event);
        }
    
    
        customHeaderComponent.prototype.onSortChanged = function () {
            function deactivate(toDeactivateItems) {
                toDeactivateItems.forEach(function (toDeactivate) {
                    toDeactivate.hidden = true;
                });
            }
    
            function activate(toActivate) {
                toActivate.hidden = false;
            }
    
            if (this.agParams.column.isSortAscending()) {
                deactivate([this.eSortUpButton]);
                activate(this.eSortDownButton)
            } else if (this.agParams.column.isSortDescending()) {
                deactivate([this.eSortDownButton]);
                activate(this.eSortUpButton)
            } else {
                deactivate([this.eSortUpButton, this.eSortDownButton]);
            }
        };
    
        customHeaderComponent.prototype.getGui = function () {
            return this.eGui;
        };
    
        customHeaderComponent.prototype.onMenuClick = function () {
            this.agParams.showColumnMenu(this.eMenuButton);
        };
    
        customHeaderComponent.prototype.onSortRequested = function (order, event) {
            this.agParams.setSort(order, event.shiftKey);
        };
    
        customHeaderComponent.prototype.destroy = function () {
            if (this.onMenuClickListener) {
                this.eMenuButton.removeEventListener('click', this.onMenuClickListener)
            }
        };
    

    【讨论】:

    • 是的,主要问题是要编写大量代码,并且有两种编写方法(一种是旧的,一种是新的使用 ES 脚本)。
    • 我们如何在标头中使用 Angular.js 模板?我曾经有&lt;span ng-bind="colDef.headerName"&gt;&lt;/span&gt; 并且在使用标题组件时似乎不起作用。没有文档...
    猜你喜欢
    • 1970-01-01
    • 2019-03-04
    • 2020-08-24
    • 2020-07-25
    • 1970-01-01
    • 2023-03-23
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多