angular-ui-grid: как выделить строку при наведении мыши?

Я хочу выделить целую строку угловой ui-сетки, когда мышь находится поверх нее.

Я попытался изменить rowTemplate, добавив обратные вызовы ng-mouseover и ng-mouseleave, которые устанавливают цвет фона.

вот мой rowTemplate-я ожидаю, что первые три строки изменят весь цвет строки на красный. Но меняется только ячейка под мышкой.

<div
    ng-mouseover="rowStyle={'background-color': 'red'}; grid.appScope.onRowHover(this);"
    ng-mouseleave="rowStyle={}"
    ng-style="rowStyle"
    ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.uid"
    ui-grid-one-bind-id-grid="rowRenderIndex + '-' + col.uid + '-cell'"
    class="ui-grid-cell"
    ng-class="{ 'ui-grid-row-header-cell': col.isRowHeader }"
    role="{{col.isRowHeader ? 'rowheader' : 'gridcell'}}"
    ui-grid-cell>
</div>

как выделить целую строку в событиях mouseover?

другой подход, который я пробовал: используя некоторую функцию обратного вызова, сделайте это-как appScope.onRowHover в Примере. Здесь, у меня есть область действия ряда, зависшего на. Как мне создать стиль этой строки в функции onRowHover?

спасибо!

ссылка на Plunkr. Я ожидаю, что mousing над ячейкой сетки превратит всю строку в красный цвет.

4 ответов


вот, да. Я внес изменения в шаблон строки. http://plnkr.co/edit/gKqt8JEo2FukS3URRLJ5?p=preview

RowTemplate:

<div ng-mouseover="rowStyle={'background-color': 'red'}; grid.appScope.onRowHover(this);" ng-mouseleave="rowStyle={}">
    <div  ng-style="rowStyle" ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.uid" ui-grid-one-bind-id-grid="rowRenderIndex + '-' + col.uid + '-cell'"
    class="ui-grid-cell" ng-class="{ 'ui-grid-row-header-cell': col.isRowHeader }" role="{{col.isRowHeader ? 'rowheader' : 'gridcell'}}" ui-grid-cell>
    </div>
</div>

(angular-ui-grid#3.0.7) Самый простой способ-использовать стили наведения CSS, просто добавьте следующие стили CSS для страницы, и все готово:

.ui-grid-row:hover .ui-grid-cell {
  background-color: beige;
}

С ui-grid 3.1.1 вышеуказанные стили не работали. Я должен был сделать это:

.ui-grid-row:nth-child(odd):hover .ui-grid-cell{background:red}
.ui-grid-row:nth-child(even):hover .ui-grid-cell{background:red}

решение заимствовано отсюда


существует небольшая проблема с решением SaiGiridhar: выделение выделения перестает работать, так как другая обертка добавляется поверх ng-repeat div.

небольшое исправление для него было бы:

<div ng-mouseover="rowStyle={'background-color': (rowRenderIndex%2 == 1) ? '#76BED6' : '#BFDAE3'};" ng-mouseleave="rowStyle={}" ng-style="selectedStyle={'background-color': (row.isSelected) ? '#379DBF' : ''}">
    <div ng-style="(!row.isSelected) ? rowStyle : selectedStyle" ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.uid" ui-grid-one-bind-id-grid="rowRenderIndex + '-' + col.uid + '-cell'"
        class="ui-grid-cell" ng-class="{ 'ui-grid-row-header-cell': col.isRowHeader }" role="{{col.isRowHeader ? 'rowheader' : 'gridcell'}}" ui-grid-cell>
    </div>
</div>

Я только что скопировал свой код. Он добавляет альтернативный стиль строки для выделенных строк, а также исправляет выделение выбранной строки.

надеюсь, это кому-то поможет.


это сложнее, если у вас включен выбор. Использовать это.

/ / js

   $templateCache.put('ui-grid/ui-grid-row',
            `
            <div 
            ng-mouseenter="row.isHov = true" 
            ng-mouseleave="row.isHov = false" 
            ng-init="row.isHov = false"
            ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.uid"
            ui-grid-one-bind-id-grid="rowRenderIndex + '-' + col.uid + '-cell'"
            class="ui-grid-cell"
            ng-class="{ 'on': row.isHov, 'ui-grid-row-header-cell': col.isRowHeader }"
            role="{{col.isRowHeader ? 'rowheader' : 'gridcell'}}"
            ui-grid-cell>
          </div>
            `
        );

/ / scss

.ui-grid-cell {


&.on {
    .ui-grid-cell-contents {
        background: red;
    }
}

}