angularjstwitter-bootstrap-3angular-ui-gridbootstrap-tabs

ui-grid inside tab is displayed without columns


I'm implementing a tab with an ui-grid that no show column from 5-th one. In the firsst application load the grid is showed pretty well, but if I press F5, Ctrl-F5 the grid doesnt show the columns, as shown on images.

I check the generated HTML and the content for hiden columns wasn't generated. If I put the ui-grid outside tab always it's shown as expected

First Upload First Load

After F5 or Ctrl+F5 After F5 or CtrlF5

Can see in menu that all columns are marked as shown Can see in menu that all columns are marked as shown


Hidding a column refresh the ui-grid Hidding a column refresh the ui-grid
Outside tabs always works Outside tab always works

Reduced web code

    Service.prototype.getColumns = function () {
        return [
                        { field: 'branch_Name', displayName: commons.translate('branch_externalform_field_name_label'), enableCellEdit: false },
                        { field: 'productPackageProduct_Product_Name', width: '300', displayName: commons.translate('product_externalform_field_name_label'), enableCellEdit: false },
                        { field: 'productPackageProduct_ProductPackage_Name', displayName: commons.translate('productpackage_externalform_field_name_label'), enableCellEdit: false },
                        { field: 'measureUnit_Name', displayName: commons.translate('measureunit_externalform_field_name_label'), enableCellEdit: false },
                        { field: 'quantity', displayName: commons.translate('stock_selfform_field_quantity_label'), enableCellEdit: false },
                        { field: 'price', displayName: commons.translate('stock_selfform_field_price_label'), enableCellEdit: false },
                        { field: 'createdDate', cellFilter: 'date', displayName: commons.translate('stock_selfform_field_createddate_label'), enableCellEdit: false },
                        { field: 'buyerOfferCount', width: '60', displayName: commons.translate('buyeroffer_entity_name_pluralsimple'), enableCellEdit: false, enableSorting: false },
                        {
                            field: 'myCurrentBuyerOffer.unitaryPrice', width: '90', displayName: commons.translate('buyeroffer_html_fromstock_unitaryprice_label'), enableCellEdit: true, enableCellEditOnFocus: true, enableSorting: false,
                            editableCellTemplate: "<div class=\"bg-warning\"><form name=\"inputForm\"><input type=\"number\" ng-class=\"'colt' + col.uid\" ui-grid-editor ng-model=\"MODEL_COL_FIELD\"  data-ng-model-options=\"{allowInvalid:true}\" data-z-float step=\"0.01\" min=\"0.01\" max=\"{{row.entity.price}}\" ng-pattern=\"/^[0-9]+(\.[0-9]{1,2})?$/\"></form></div>",
                        },
                        {
                            field: 'myCurrentBuyerOffer.quantity', width: '90', displayName: commons.translate('buyeroffer_html_fromstock_quantity_label'), enableCellEdit: true, enableCellEditOnFocus: true, enableSorting: false,
                            editableCellTemplate: "<div class=\"bg-warning\"><form name=\"inputForm\"><input type=\"number\" ng-class=\"'colt' + col.uid\" ui-grid-editor ng-model=\"MODEL_COL_FIELD\"  data-ng-model-options=\"{allowInvalid:true}\" data-z-float step=\"1\" min=\"0\" max=\"{{row.entity.quantity}}\"></form></div>",
                        },
                        { field: 'id', displayName: '', width: '100', rezisable: false, enableColumnMenu: false, enableSorting: false, enableCellEdit: false, enableCellEditOnFocus: false, enableFocus: false, cellTemplate: '<div class="text-center"><button class="btn btn-xs" ng-disabled=\"!grid.appScope.stockToOfferLogic.listConfiguration.buyerOfferReadyToSave(row.entity.myCurrentBuyerOffer)\" ng-class="{\'btn-success\': row.entity.myCurrentBuyerOffer.changed, \'btn-default\': !row.entity.myCurrentBuyerOffer.changed}" ng-click="grid.appScope.stockToOfferLogic.listConfiguration.saveNewOfferFromStock(row.entity.myCurrentBuyerOffer)"><i class="fa fa-save"></i></button><button class="btn  btn-xs" ng-if="grid.appScope.stockToOfferLogic.listConfiguration.showBuyerOfferRefreshButton(row.entity.myCurrentBuyerOffer)" ng-disabled=\"!grid.appScope.stockToOfferLogic.listConfiguration.buyerOfferCanRefresh(row.entity.myCurrentBuyerOffer)\" ng-class="{\'btn-danger\': row.entity.myCurrentBuyerOffer.changed, \'btn-default\': !row.entity.myCurrentBuyerOffer.changed}" ng-click="grid.appScope.stockToOfferLogic.listConfiguration.refreshBuyerOffer(row.entity.myCurrentBuyerOffer)"><i class="fa fa-refresh"></i></button><button class="btn btn-xs btn-success" ng-if="grid.appScope.stockToOfferLogic.listConfiguration.showBuyerOfferImplicationButton(row.entity.myCurrentBuyerOffer)" ng-click="grid.appScope.stockToOfferLogic.listConfiguration.acceptBuyerOffer(row.entity.myCurrentBuyerOffer.id)"><i class="fa fa-thumbs-o-up"></i></button></div>' },
        ];
    };
    <ul class="nav nav-tabs nav-tabs-ar">
        <li class="pointer" ng-class="{'active': filters.activeSection == 'buyer'}"><a data-target="#buyer" data-toggle="tab" ng-click="filters.activeSection = 'buyer'" translate="traderole_html_buyer_label"></a></li>
    </ul>
    <!-- Tab panes -->
    <div class="tab-content">
        <div class="tab-pane" id="buyer" ng-class="{'active': filters.activeSection == 'buyer'}">
            <div class="panel panel-default">
                <div class="panel-heading">
                </div>
                <div class="panel-body">
                    <div ng-if="filters.activeSection == 'buyer'" class="gridStyle" external-scopes="states" ui-grid="stockToOfferLogic.listConfiguration.gridOptions" ui-grid-pagination ui-grid-edit ui-grid-cellnav custom-ui-grid-scroll></div>
                </div>
            </div>
            <h3></h3>
        </div>
     </div>


Solution

  • The problem was resolved using ui.grid.autoResize.

    I don't know why but the fact is the grid(inside the tab) no allow to add more than 10 columnDefs). No matter the column's size if I added 11 defs the columns after the 4-th are hidden. So, my first idea was that ui-grid can not calculate the grid's width, maybe because the tab wrapper. Searching the way to refresh the grid for a resized container I found the module ui.grid.autoResize, which resolve all the earth's problems.