2013-12-04 3 views
2

Как я могу оживить новую строку в ng-сетке?Анимация новых строк ng-grid

Что я хотел бы, так это то, что когда новые данные поступают с сервера, они добавляются в начало сетки, и эта строка затем светится в течение нескольких секунд.

Я попытался добавить класс нг-анимировать в rowTemplate для сетки, но не увенчалась успехом:

$scope.gridOptions = { 
    data: 'myData', 
    rowTemplate: '<div style="height: 100%" class="reveal-animation"><div ng-style="{ \'cursor\': row.cursor }" ng-repeat="col in renderedColumns" ng-class="col.colIndex()" class="ngCell {{col.cellClass}}"><div class="ngVerticalBar" ng-style="{height: rowHeight}" ng-class="{ ngVerticalBarVisible: !$last }">&nbsp;</div><div ng-cell></div></div></div>' 
}; 

Где мой выявить-анимацию (поднятым прямо с нг-одушевленного документации) является:

.reveal-animation.ng-enter { 
-webkit-transition: 1s linear all; 
transition: 1s linear all; 
opacity: 0; 
} 

.reveal-animation.ng-enter.ng-enter-active { 

opacity: 1; 
} 

Но это не работает для сетки.

Есть ли способ сделать это?

Вот Plunker с моей попыткой http://plnkr.co/edit/iR9voQaFRREi0pjNLQgc?p=preview

Я добавил <ul> в нижней части, чтобы показать поведение, которое я хочу (и доказать, что нг-одушевленный работают).

ответ

7

Правильный способ оживить это путем связывания анимации .ngRow т.е.

/* 
The animate class is apart of the element and the ng-enter class 
is attached to the element once the enter animation event is triggered 
*/ 
.ngRow.ng-enter { 
-webkit-transition: 1s linear all; /* Safari/Chrome */ 
transition: 1s linear all; /* All other modern browsers and IE10+ */ 

/* The animation preparation code */ 
opacity: 0; 
} 

/* 
Keep in mind that you want to combine both CSS 
classes together to avoid any CSS-specificity 
conflicts 
*/ 
.ngRow.ng-enter.ng-enter-active { 
/* The animation code itself */ 
opacity: 1; 
} 

Проблема заключается в том, что вы используете unshift раздвинуть значений в начало массива, но нг-сетка еще функции, добавляя строку в нижней части сетки и перебирая все строки таким образом, чтобы непреднамеренно первый элемент в сетке был тем, который получает анимацию.

Вот plunker для моей вилки, которая имеет выше Css работу - возможно, вы можете взять его на шаг дальше: http://plnkr.co/edit/gNSM4FRMFcTtQtT6EU7b?p=preview

как мысль: может быть, вы можете иметь элементы идут в наборе данных как обычный толчок и переупорядочить сетку тем, что удерживает их в обратном порядке. Это может обмануть сетку в анимацию новейшей вещи, но сохранить новейшую вещь в верхней части сетки.

Если честно, я обнаружил, что просто создание собственной сетки и привязка ng-repeat к tr было намного проще, чем пытаться суетиться с другими сетчатыми системами, особенно такими, как ng-grid, где вы не получаете для управления поведением.

+0

Я не думаю, что вы спасли свою вилку! Я помещаю ваш код, хотя, и он работает, как вы описали. Что касается добавления в начало, я думаю, что могу просто добавить перечислимый класс (т. Е. Дать каждой новой строке уникальный идентификатор), а затем просто использовать jQuery для его анимации, но это похоже на хаки. – mindvirus

+0

Я бы, конечно, избегал jQuery. Каждый раз, когда вы смешиваете угловые и jquery, это должен быть красный флаг, что вы на неправильном пути. Я думаю, что лучший план - дать им уникальный идентификатор и просто упорядочить сетку таким образом и сделать обычный 'array.push' вместо' unshift'. Надеюсь, он оживит правильный ряд и положит его наверху. Не требуется jQuery. – Fourth

Смежные вопросы