I am using Angular2 and its ngFor. I want to add class to odd and to even rows, so I can separate them visually by color.
Here is my code (which does not work really):
<div *ngFor="#meeting of meetingList; #index=index; #odd=odd; #even=even;"
class="row"
[ngClass]="{ odd: odd, even: even }
">
<div class="col"></div>
<div class="col"></div>
</div>
Although if I do it like this, code works:
<div *ngFor="#meeting of meetingList; #index=index; #odd=odd; #even=even;"
class="row"
">
<div class="col" [ngClass]="{ odd: odd, even: even }"></div>
<div class="col" [ngClass]="{ odd: odd, even: even }"></div>
</div>
Is there any better way to put class to row instead to columns? Thank you in advance.
Your first code example is working fine Plunker example
@Component({
selector: 'my-app',
styles: [`
.even { color: red; }
.odd { color: green; }
`],
template: `
<h2>Hello {{name}}</h2>
<div *ngFor="let meeting of meetingList; let index=index; let odd=odd; let even=even;"
class="row"
[ngClass]="{ odd: odd, even: even }">{{meeting}}
<div class="col"></div>
<div class="col"></div>
</div>
`
})
export class App {
meetingList = ['a', 'b', 'c'];
}
let index=index;
then [index] = index;
then [class.odd] = "index%2";
If it's not odd
, then it's even
anyway. So, save a few bytes and cycles:
<div *ngFor="let meeting of meetingList; let odd = odd" [ngClass]="odd ? 'odd' : 'even'">
{{meeting}}
</div>
You can go even furter and do it only in css, using the nth-child
selector with the odd
keyword:
<style>
p:nth-child(odd) {
background: gray;
}
p:nth-child(even) {
background: white;
}
</style>
<p>First paragraph.</p>
<p>Second paragraph.</p>
<p>Third paragraph.</p>
<p>Fourth paragraph.</p>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With