File

my-lib/grid/grid.ts

Extends

Antd

Metadata

changeDetection ChangeDetectionStrategy.OnPush
encapsulation ViewEncapsulation.None
selector [grid],grid
styleUrls grid.less,
patch.less
templateUrl ./grid.html

Index

Properties
Methods
Inputs
Accessors

Constructor

constructor(ele: ElementRef, render: Renderer2)
Parameters :
Name Type Optional Description
ele ElementRef
render Renderer2

Inputs

activeClassName

Type: string

activeStyle

Type: boolean

carouselMaxRow

Type: number

columnNum

Type: number

data

Type: []

hasLine
isCarousel

Type: boolean

Default value: false

itemStyle
square

Type: any

Methods

Private _splice
_splice()
Returns : void
Private getRows
getRows(rowCount: , dataLength: )
Parameters :
Name Type Optional Description
rowCount
dataLength
Returns : void

Properties

_activeClassName
_activeClassName: string
Type : string
Default value : ''
_carouselMaxRow
_carouselMaxRow: number
Type : number
Default value : 2
_columnNum
_columnNum: number
Type : number
Default value : 4
_data
_data: any[]
Type : any[]
Default value : []
_itemStyle
_itemStyle: any
Type : any
groups
groups: any[]
Type : any[]
Default value : []
tpl
tpl: TemplateRef<any>
Type : TemplateRef<any>
Decorators : ContentChild

Accessors

data
setdata(val: [])
columnNum
setcolumnNum(val: number)
carouselMaxRow
setcarouselMaxRow(val: number)
hasLine
sethasLine(val: )
square
setsquare(val: any)
activeStyle
setactiveStyle(val: boolean)
activeClassName
getactiveClassName()
setactiveClassName(val: string)
itemStyle
getitemStyle()
setitemStyle(val: )
import {
    ViewEncapsulation, Component,
    Input, ElementRef, Renderer2,
    ChangeDetectionStrategy,
    ContentChild, TemplateRef
} from '@angular/core';
import { Antd } from '../antd';
@Component({
    selector: '[grid],grid',
    templateUrl: './grid.html',
    encapsulation: ViewEncapsulation.None,
    changeDetection: ChangeDetectionStrategy.OnPush,
    styleUrls: ['./grid.less', './patch.less']
})
export class GridComponent extends Antd {
    groups: any[] = [];
    @ContentChild(TemplateRef) tpl: TemplateRef<any>;
    // 传入的菜单数据
    _data: any[] = [];
    @Input()
    set data(val: any[]) {
        if (val) {
            this._data = val;
            this._splice();
        }
    }

    // 列数
    _columnNum: number = 4;
    @Input()
    set columnNum(val: number) {
        if (val) {
            this._columnNum = val;
            this._splice();
        }
    }

    // 是否跑马灯
    @Input() isCarousel: boolean = false;

    // 如果是跑马灯, 一页跑马灯需要展示的行数
    _carouselMaxRow: number = 2;
    @Input()
    set carouselMaxRow(val: number) {
        this._carouselMaxRow = val;
    }
    // 是否有边框
    @Input()
    set hasLine(val) {
        this.addToClass('-line', this.isMeepoTrue(val));
    }

    // 每个格子是否固定为正方形
    @Input()
    set square(val: any) {
        this.addToClass('-square', this.isMeepoTrue(val));
    }

    // 点击反馈的自定义样式 (设为 false 时表示禁止点击反馈)
    @Input()
    set activeStyle(val: boolean) { }

    // 点击反馈的自定义类名
    _activeClassName: string = '';
    @Input()
    set activeClassName(val: string) {
        this._activeClassName = val;
    }
    get activeClassName() {
        return this._activeClassName;
    }
    // 每个格子自定义样式
    _itemStyle: any;
    @Input()
    set itemStyle(val: Object) {
        this._itemStyle = val;
    }
    get itemStyle() {
        return this._itemStyle;
    }
    constructor(
        ele: ElementRef,
        render: Renderer2
    ) {
        super(ele, render, 'grid');
    }
    // 数据分组
    private _splice() {
        const columnNum = this._columnNum!;
        const carouselMaxRow = this._carouselMaxRow!;
        const dataLength = this._data.length;
        let rowCount = Math.ceil(dataLength / columnNum);
        if (this.isCarousel) {
            if (rowCount % carouselMaxRow !== 0) {
                rowCount = rowCount + carouselMaxRow - rowCount % carouselMaxRow;
            }
            const pageCount = Math.ceil(rowCount / carouselMaxRow);
            this.getRows(rowCount, dataLength);
        } else {
            this.getRows(rowCount, dataLength);
        }
    }

    private getRows(rowCount, dataLength) {
        const columnNum = this._columnNum!;
        const data = [];
        for (let i = 0; i < rowCount; i++) {
            const rowArr: any[] = [];
            for (let j = 0; j < columnNum; j++) {
                const dataIndex = i * columnNum + j;
                if (dataIndex < dataLength) {
                    rowArr.push({ data: this._data[dataIndex], index: dataIndex });
                } else {
                    rowArr.push({ index: dataIndex, data: null });
                }
            }
            data[i] = rowArr;
        }
        this.groups = data;
    }
}
<flex *ngFor="let group of groups;index as row;" justify="center" align="stretch">
    <grid-item [ngStyle]="itemStyle" [active]="activeClassName" *ngFor="let item of group;index as col;">
        <ng-container *ngTemplateOutlet="tpl;context: {$implicit: item.data, index: item.index}"></ng-container>
    </grid-item>
</flex>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""