my-lib/tabs/tabs.ts
OnInit
AfterContentInit
OnDestroy
encapsulation | ViewEncapsulation.None |
selector | tabs |
styleUrls | tabs.less, |
templateUrl | ./tabs.html |
Properties |
Methods |
Inputs |
HostBindings |
Accessors |
constructor()
|
Defined in my-lib/tabs/tabs.ts:70
|
activeIndex
|
Type:
Default value: |
Defined in my-lib/tabs/tabs.ts:67
|
animated
|
Type: |
Defined in my-lib/tabs/tabs.ts:62
|
prefixCls
|
Type:
Default value: |
Defined in my-lib/tabs/tabs.ts:19
|
tabBarPosition
|
|
Defined in my-lib/tabs/tabs.ts:56
|
tabDirection
|
|
Defined in my-lib/tabs/tabs.ts:52
|
class |
class:
|
Defined in my-lib/tabs/tabs.ts:31
|
ngAfterContentInit |
ngAfterContentInit()
|
Defined in my-lib/tabs/tabs.ts:94
|
Returns :
void
|
ngOnDestroy |
ngOnDestroy()
|
Defined in my-lib/tabs/tabs.ts:91
|
Returns :
void
|
ngOnInit |
ngOnInit()
|
Defined in my-lib/tabs/tabs.ts:90
|
Returns :
void
|
_barUnderlineClass |
_barUnderlineClass:
|
Type : Object
|
Default value : {}
|
Defined in my-lib/tabs/tabs.ts:27
|
_tabsBarWrap |
_tabsBarWrap:
|
Type : Object
|
Default value : {}
|
Defined in my-lib/tabs/tabs.ts:25
|
_tabsClass |
_tabsClass:
|
Type : Object
|
Default value : {}
|
Defined in my-lib/tabs/tabs.ts:24
|
_tabsContentWrapClass |
_tabsContentWrapClass:
|
Type : Object
|
Default value : {}
|
Defined in my-lib/tabs/tabs.ts:28
|
_tabsDefaultBar |
_tabsDefaultBar:
|
Type : Object
|
Default value : {}
|
Defined in my-lib/tabs/tabs.ts:26
|
bars |
bars:
|
Type : QueryList<TabItemComponent>
|
Decorators : ContentChildren
|
Defined in my-lib/tabs/tabs.ts:20
|
page |
page:
|
Type : TabPanelComponent
|
Defined in my-lib/tabs/tabs.ts:70
|
panels |
panels:
|
Type : QueryList<TabPanelComponent>
|
Decorators : ContentChildren
|
Defined in my-lib/tabs/tabs.ts:21
|
sub$ |
sub$:
|
Type : any
|
Defined in my-lib/tabs/tabs.ts:69
|
tabsBarWrapClass |
gettabsBarWrapClass()
|
Defined in my-lib/tabs/tabs.ts:35
|
tabbsDefaultBar |
gettabbsDefaultBar()
|
Defined in my-lib/tabs/tabs.ts:39
|
barUnderlineClass |
getbarUnderlineClass()
|
Defined in my-lib/tabs/tabs.ts:43
|
tabsContentWrapClass |
gettabsContentWrapClass()
|
Defined in my-lib/tabs/tabs.ts:47
|
tabDirection |
settabDirection(val: )
|
Defined in my-lib/tabs/tabs.ts:52
|
tabBarPosition |
settabBarPosition(val: )
|
Defined in my-lib/tabs/tabs.ts:56
|
animated |
setanimated(val: boolean)
|
Defined in my-lib/tabs/tabs.ts:62
|
import {
Component, OnInit, Input,
Output, EventEmitter, HostBinding,
ViewEncapsulation, ContentChildren, QueryList,
Injectable, AfterContentInit, OnDestroy
} from '@angular/core';
import { prefixCls, tabsDefaultBarPrefixCls } from './var';
import { ansycClassObj, merge, setClassObj } from 'meepo-utils';
import { TabItemComponent } from './tab-item/tab-item';
import { TabPanelComponent } from './tab-panel/tab-panel';
@Component({
selector: 'tabs',
templateUrl: './tabs.html',
styleUrls: ['./tabs.less', './patch.less'],
encapsulation: ViewEncapsulation.None
})
export class TabsComponent implements OnInit, AfterContentInit, OnDestroy {
@Input() prefixCls: string = prefixCls;
@ContentChildren(TabItemComponent) bars: QueryList<TabItemComponent>;
@ContentChildren(TabPanelComponent) panels: QueryList<TabPanelComponent>;
// tabs
_tabsClass: Object = {};
_tabsBarWrap: Object = {};
_tabsDefaultBar: Object = {};
_barUnderlineClass: Object = {};
_tabsContentWrapClass: Object = {};
@HostBinding(`class`)
get tabsClass() {
return ansycClassObj(this._tabsClass);
}
get tabsBarWrapClass() {
return ansycClassObj(this._tabsBarWrap);
}
get tabbsDefaultBar() {
return ansycClassObj(this._tabsDefaultBar);
}
get barUnderlineClass() {
return ansycClassObj(this._barUnderlineClass);
}
get tabsContentWrapClass() {
return ansycClassObj(this._tabsContentWrapClass);
}
@Input()
set tabDirection(val: 'horizontal' | 'vertical') {
this._tabsClass = setClassObj('horizontal,vertical', this._tabsClass, val, prefixCls);
}
@Input()
set tabBarPosition(val: 'left' | 'right' | 'top' | 'bottom') {
this._tabsClass = setClassObj('left,right,top,bottom', this._tabsClass, val, prefixCls);
this._tabsDefaultBar = setClassObj('left,right,top,bottom', this._tabsDefaultBar, val, tabsDefaultBarPrefixCls);
}
@Input()
set animated(val: boolean) {
this._tabsDefaultBar[`${tabsDefaultBarPrefixCls}-animated`] = val;
this._tabsContentWrapClass[`${prefixCls}-content-wrap-animated`] = val;
}
@Input() activeIndex: number = 0;
sub$: any;
page: TabPanelComponent;
constructor() {
this._tabsClass[`${prefixCls}`] = true;
this._tabsClass[`${prefixCls}-top`] = true;
this._tabsClass[`${prefixCls}-horizontal`] = true;
// tabs bar wrap
this._tabsBarWrap[`${prefixCls}-bar-wrap`] = true;
// tabs default bar
this._tabsDefaultBar[`${tabsDefaultBarPrefixCls}`] = true;
this._barUnderlineClass[`${tabsDefaultBarPrefixCls}-underline`] = true;
this._tabsDefaultBar[`${tabsDefaultBarPrefixCls}-animated`] = true;
this._tabsDefaultBar[`${tabsDefaultBarPrefixCls}-top`] = true;
this._tabsContentWrapClass[`${prefixCls}-content-wrap`] = true;
this._tabsContentWrapClass[`${prefixCls}-content-wrap-animated`] = true;
}
ngOnInit() { }
ngOnDestroy() {
this.sub$.unsubscribe();
}
ngAfterContentInit() {
const subs: any[] = [];
const panels: any[] = [];
this.bars.map((bar: TabItemComponent, index: number) => {
subs.push(bar.onClick);
panels[index] = bar.panel;
});
this.panels.reset(panels);
this.sub$ = merge(...subs)
.startWith(this.activeIndex)
.map(res => Number(res))
.subscribe((res: number) => {
// 处理激活状态
this.bars.map((bar, index) => {
bar.setActive(res === index);
});
this.activeIndex = res;
this.page = this.panels.find((item, index, panels) => {
return res === index;
});
})
}
}
<div [class]="tabsBarWrapClass">
<div [class]="tabbsDefaultBar">
<div [class]="prefixCls + '-default-bar-content'">
<ng-container *ngFor="let bar of bars;index as i;">
<ng-container *ngTemplateOutlet="bar.tpl;context:{$implicit:i}"></ng-container>
</ng-container>
<div [class]="barUnderlineClass" [style.left.%]="(activeIndex/bars.length) * 100" [style.width.%]="(1/bars.length) * 100"></div>
</div>
</div>
</div>
<div [class]="tabsContentWrapClass">
<ng-container *ngTemplateOutlet="page?.tpl"></ng-container>
</div>