angular-cn/public/docs/_examples/homepage-tabs/ts/app/ui_tabs.ts

52 lines
1.2 KiB
TypeScript

// #docregion
import { Component, Directive, Input, QueryList,
ViewContainerRef, TemplateRef, ContentChildren } from '@angular/core';
@Directive({
selector: '[ui-pane]'
})
export class UiPane {
@Input() title: string;
private _active: boolean = false;
constructor(public viewContainer: ViewContainerRef,
public templateRef: TemplateRef<any>) { }
@Input() set active(active: boolean) {
if (active === this._active) { return; }
this._active = active;
if (active) {
this.viewContainer.createEmbeddedView(this.templateRef);
} else {
this.viewContainer.remove(0);
}
}
get active(): boolean {
return this._active;
}
}
@Component({
selector: 'ui-tabs',
template: `
<ul class="nav nav-tabs">
<li *ngFor="let pane of panes"
(click)="select(pane)"
role="presentation" [class.active]="pane.active">
<a>{{pane.title}}</a>
</li>
</ul>
<ng-content></ng-content>
`,
styles: ['a { cursor: pointer; cursor: hand; }']
})
export class UiTabs {
@ContentChildren(UiPane) panes: QueryList<UiPane>;
select(pane: UiPane) {
this.panes.toArray().forEach((p: UiPane) => p.active = p === pane);
}
}