parent
fb2773b8f3
commit
ccff17599a
|
@ -26,6 +26,8 @@ import {BaseException} from "../../facade/exceptions";
|
||||||
* `NgFor` provides several exported values that can be aliased to local variables:
|
* `NgFor` provides several exported values that can be aliased to local variables:
|
||||||
*
|
*
|
||||||
* * `index` will be set to the current loop iteration for each template context.
|
* * `index` will be set to the current loop iteration for each template context.
|
||||||
|
* * `first` will be set to a boolean value indicating whether the item is the first one in the
|
||||||
|
* iteration.
|
||||||
* * `last` will be set to a boolean value indicating whether the item is the last one in the
|
* * `last` will be set to a boolean value indicating whether the item is the last one in the
|
||||||
* iteration.
|
* iteration.
|
||||||
* * `even` will be set to a boolean value indicating whether this item has an even index.
|
* * `even` will be set to a boolean value indicating whether this item has an even index.
|
||||||
|
@ -126,6 +128,7 @@ export class NgFor implements DoCheck {
|
||||||
|
|
||||||
for (var i = 0, ilen = this._viewContainer.length; i < ilen; i++) {
|
for (var i = 0, ilen = this._viewContainer.length; i < ilen; i++) {
|
||||||
var viewRef = <EmbeddedViewRef>this._viewContainer.get(i);
|
var viewRef = <EmbeddedViewRef>this._viewContainer.get(i);
|
||||||
|
viewRef.setLocal('first', i === 0);
|
||||||
viewRef.setLocal('last', i === ilen - 1);
|
viewRef.setLocal('last', i === ilen - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -298,6 +298,25 @@ export function main() {
|
||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it('should display first item correctly',
|
||||||
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
||||||
|
var template =
|
||||||
|
'<div><copy-me template="ngFor: var item of items; var isFirst=first">{{isFirst.toString()}}</copy-me></div>';
|
||||||
|
|
||||||
|
tcb.overrideTemplate(TestComponent, template)
|
||||||
|
.createAsync(TestComponent)
|
||||||
|
.then((fixture) => {
|
||||||
|
fixture.debugElement.componentInstance.items = [0, 1, 2];
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(fixture.debugElement.nativeElement).toHaveText('truefalsefalse');
|
||||||
|
|
||||||
|
fixture.debugElement.componentInstance.items = [2, 1];
|
||||||
|
fixture.detectChanges();
|
||||||
|
expect(fixture.debugElement.nativeElement).toHaveText('truefalse');
|
||||||
|
async.done();
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
|
||||||
it('should display last item correctly',
|
it('should display last item correctly',
|
||||||
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
||||||
var template =
|
var template =
|
||||||
|
|
Loading…
Reference in New Issue