我在ui网格的columDefs中使用headerCellTemplate(不是ng- grid,而是新的重写)。在html中,我有一个复选框。本质上,我试图在作为所有复选框的列的标题中添加一个复选框,以便可以检查所有/无。带有复选框的单元格可以正常显示。问题在于标题中复选框中的ng- change永远不会触发该事件。另外,ng- model值永远不会改变。查看代码,有一个名为uiGridHeaderCell的指令,因此我必须假定它正在吞噬我的事件以及它自己的作用域,因此它永远不会在我的作用域中设置变量。
可以解决吗?我遇到的每个示例都从未有人尝试从标头中调用自己的方法(即,调用指令范围之外的内容)。
在ui-grid中,有一个称为的功能externalScopes可能对您有用。教程在这里
externalScopes
这是新的headerCellTemplate:
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>
(注意第4行的输入类型复选框)
我还添加$event.stopPropagation()了阻止事件到达基础div的功能。
$event.stopPropagation()
在HTML中,您必须编写:
<div ui-grid="gridOptions" external-scopes="myViewModel" class="grid"></div>
查看此柱塞以了解更多详细信息