代码之家  ›  专栏  ›  技术社区  ›  Vinod Louis

如何防止自定义元素上的行选择在UI-GRID中单击

  •  1
  • Vinod Louis  · 技术社区  · 9 年前

    我在使用带有行选择和自定义单元格元素的UI GRId时遇到了一个问题:

    示例plunker如下: http://plnkr.co/edit/Ed6s6CGFGXyUzj2cyx2g?p=preview

    $scope.gridOptions = { showGridFooter:true,enableRowSelection: true, enableRowHeaderSelection: false };
    
    $scope.gridOptions.columnDefs = [
    { name: 'id' },
    { name: 'name'},
    { name: 'age', displayName: 'Age (not focusable)', allowCellFocus : false },
    { name: 'address.city' },
    { name:'address.pin',cellTemplate:'<select><option value="122002">122002</option><option value="122001">122001</option></select>'}];
    

    您可以看到,单击行时,相应的行会被选中,而如果您倾向于隐式选择下拉选项,行选择事件也会被触发,我希望在元素上单击类似下拉列表的内容时,不应触发行选择事件。

    请指导。

    2 回复  |  直到 9 年前
        1
  •  2
  •   Brian    9 年前

    有趣的问题,还没有遇到,但我相信这是我唯一一次遇到。我创建了一个plunk来演示我的解决方案。

    基本上,正如AranS所提到的,我所做的是注册一个观察者。从那里,我们有两个要处理的对象:行和发生的事件。由于事件对象显示了选中(单击)的元素,因此我们可以确定它是DIV还是其他元素。如果选择列表发生更改,则为evt.srcElement的值。tagName为“SELECT”。

    http://plnkr.co/edit/k2XhHr2QaD1sA5y2hcFd?p=preview

      $scope.gridOptions.onRegisterApi = function( gridApi ) {
        $scope.gridApi = gridApi;
    
        gridApi.selection.on.rowSelectionChanged($scope,function(row,evt){
          if (evt)
            row.isSelected = (evt.srcElement.tagName === 'DIV');
        });
    
      };
    
        2
  •  1
  •   Community Mohan Dere    8 年前

    ui网格的API允许控制行选择。从另一个线程看这个答案: https://stackoverflow.com/a/33788459/5954939 基本上你可以利用这个活动 rowSelectionChanged isRowSelectable 如果你需要一个例子,请告诉我。