In ui-grid there is a feature called externalScopes
which may be useful to you. Tutorial is here
This is the new headerCellTemplate
:
<div ng-class="{ 'sortable': sortable }">
<div class="ui-grid-vertical-bar"> </div>
<div class="ui-grid-cell-contents" col-index="renderIndex">
<input type="checkbox" ng-click="$event.stopPropagation();getExternalScopes().showMe()">{{ col.displayName CUSTOM_FILTERS }}
<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 }">
</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"> </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-click="$event.stopPropagation()" ng-attr-placeholder="{{colFilter.placeholder || ''}}" />
<div class="ui-grid-filter-button" ng-click="colFilter.term = null">
<i class="ui-grid-icon-cancel right" ng-show="!!colFilter.term"> </i>
<!-- use !! because angular interprets 'f' as false -->
</div>
</div>
</div>
(Note the input type checkbox on line 4)
Also I added $event.stopPropagation()
to stop the event from reaching the underlying div.
In the HTML you have to write:
<div ui-grid="gridOptions" external-scopes="myViewModel" class="grid"></div>
Look at this Plunker for more details