The ngClassOdd
and ngClassEven
directives work exactly as
ngClass, except they work in
conjunction with ngRepeat
and take effect only on odd (even) rows.
This directive can be applied only within the scope of an ngRepeat.
<ANY
ng-class-odd="expression">
...
</ANY>
<ANY class="ng-class-odd: expression;"> ... </ANY>
Param | Type | Details |
---|---|---|
ngClassOdd | expression |
Expression to eval. The result of the evaluation can be a string representing space delimited class names or an array. |
Animation | Occurs |
---|---|
addClass | just before the class is applied to the element |
removeClass | just before the class is removed from the element |
<ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
<li ng-repeat="name in names">
<span ng-class-odd="'odd'" ng-class-even="'even'">
{{name}}
</span>
</li>
</ol>
.odd {
color: red;
}
.even {
color: blue;
}
it('should check ng-class-odd and ng-class-even', function() {
expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
toMatch(/odd/);
expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
toMatch(/even/);
});
An example on how to implement animations using ngClassOdd
:
<div ng-init="items=['Item 3', 'Item 2', 'Item 1', 'Item 0']">
<button ng-click="items.unshift('Item ' + items.length)">Add item</button>
<hr />
<table>
<tr ng-repeat="item in items" ng-class-odd="'odd'">
<td>{{ item }}</td>
</tr>
</table>
</div>
.odd {
background: rgba(255, 255, 0, 0.25);
}
.odd-add, .odd-remove {
transition: 1.5s;
}
it('should add new entries to the beginning of the list', function() {
var button = element(by.buttonText('Add item'));
var rows = element.all(by.repeater('item in items'));
expect(rows.count()).toBe(4);
expect(rows.get(0).getText()).toBe('Item 3');
expect(rows.get(1).getText()).toBe('Item 2');
button.click();
expect(rows.count()).toBe(5);
expect(rows.get(0).getText()).toBe('Item 4');
expect(rows.get(1).getText()).toBe('Item 3');
});
it('should add odd class to odd entries', function() {
var button = element(by.buttonText('Add item'));
var rows = element.all(by.repeater('item in items'));
expect(rows.get(0).getAttribute('class')).toMatch(/odd/);
expect(rows.get(1).getAttribute('class')).not.toMatch(/odd/);
button.click();
expect(rows.get(0).getAttribute('class')).toMatch(/odd/);
expect(rows.get(1).getAttribute('class')).not.toMatch(/odd/);
});