diff --git a/src/components/grid/nz-col.component.ts b/src/components/grid/nz-col.component.ts
index 002888a5662..43432e2987a 100644
--- a/src/components/grid/nz-col.component.ts
+++ b/src/components/grid/nz-col.component.ts
@@ -12,12 +12,20 @@ import {
} from '@angular/core';
import { NzRowComponent } from './nz-row.component';
+export abstract class EmbeddedProperty {
+ span: number;
+ pull: number;
+ push: number;
+ offset: number;
+ order: number
+}
+
@Component({
- selector : 'nz-col',
- template : `
+ selector: 'nz-col',
+ template: `
`,
- styles : []
+ styles : []
})
export class NzColComponent implements OnInit, OnChanges {
@@ -40,11 +48,11 @@ export class NzColComponent implements OnInit, OnChanges {
@Input() nzOffset: number;
@Input() nzPush: number;
@Input() nzPull: number;
- @Input() nzXs: number;
- @Input() nzSm: number;
- @Input() nzMd: number;
- @Input() nzLg: number;
- @Input() nzXl: number;
+ @Input() nzXs: number | EmbeddedProperty;
+ @Input() nzSm: number | EmbeddedProperty;
+ @Input() nzMd: number | EmbeddedProperty;
+ @Input() nzLg: number | EmbeddedProperty;
+ @Input() nzXl: number | EmbeddedProperty;
/** temp solution since no method add classMap to host https://github.com/angular/angular/issues/7289*/
setClassMap(): void {
@@ -57,12 +65,9 @@ export class NzColComponent implements OnInit, OnChanges {
this.nzOffset && `${this._prefixCls}-offset-${this.nzOffset}`,
this.nzPull && `${this._prefixCls}-pull-${this.nzPull}`,
this.nzPush && `${this._prefixCls}-push-${this.nzPush}`,
- this.nzXs && `${this._prefixCls}-xs-${this.nzXs}`,
- this.nzSm && `${this._prefixCls}-sm-${this.nzSm}`,
- this.nzMd && `${this._prefixCls}-md-${this.nzMd}`,
- this.nzLg && `${this._prefixCls}-lg-${this.nzLg}`,
- this.nzXl && `${this._prefixCls}-xl-${this.nzXl}`,
- ].filter((item) => {
+ ...this.generateClass()
+ ];
+ this._classList = this._classList.filter((item) => {
return !!item;
});
this._classList.forEach(_className => {
@@ -70,6 +75,24 @@ export class NzColComponent implements OnInit, OnChanges {
})
}
+ generateClass() {
+ const listOfSizeInputName = [ 'nzXs', 'nzSm', 'nzMd', 'nzLg', 'nzXl' ];
+ const listOfClassName = [];
+ listOfSizeInputName.forEach(name => {
+ const sizeName = name.replace('nz', '').toLowerCase();
+ if ((typeof(this[ name ]) === 'number') || (typeof (this[ name ]) === 'string')) {
+ listOfClassName.push(this[ name ] && `${this._prefixCls}-${sizeName}-${this[ name ]}`);
+ } else {
+ listOfClassName.push(this[ name ] && this[ name ][ 'span' ] && `${this._prefixCls}-${sizeName}-${this[ name ][ 'span' ]}`);
+ listOfClassName.push(this[ name ] && this[ name ][ 'pull' ] && `${this._prefixCls}-${sizeName}-pull-${this[ name ][ 'pull' ]}`);
+ listOfClassName.push(this[ name ] && this[ name ][ 'push' ] && `${this._prefixCls}-${sizeName}-push-${this[ name ][ 'push' ]}`);
+ listOfClassName.push(this[ name ] && this[ name ][ 'offset' ] && `${this._prefixCls}-${sizeName}-offset-${this[ name ][ 'offset' ]}`);
+ listOfClassName.push(this[ name ] && this[ name ][ 'order' ] && `${this._prefixCls}-${sizeName}-order-${this[ name ][ 'order' ]}`);
+ }
+ });
+ return listOfClassName;
+ }
+
ngOnChanges(changes: { [propertyName: string]: SimpleChange }) {
this.setClassMap();
}
diff --git a/src/components/grid/nz-grid.component.spec.ts b/src/components/grid/nz-grid.component.spec.ts
index 6604a41854c..cc5a01c8d69 100644
--- a/src/components/grid/nz-grid.component.spec.ts
+++ b/src/components/grid/nz-grid.component.spec.ts
@@ -1,17 +1,17 @@
/* tslint:disable:no-unused-variable */
-import {async, ComponentFixture, TestBed, ComponentFixtureAutoDetect} from '@angular/core/testing';
-import {Component, DebugElement} from '@angular/core';
-import {By} from '@angular/platform-browser';
-import {NzGridModule} from './nz-grid.module';
-import {NzRowComponent} from './nz-row.component';
-import {NzColDirective} from './nz-col.directive';
+import { async, ComponentFixture, TestBed, ComponentFixtureAutoDetect } from '@angular/core/testing';
+import { Component, DebugElement } from '@angular/core';
+import { By } from '@angular/platform-browser';
+import { NzGridModule } from './nz-grid.module';
+import { NzRowComponent } from './nz-row.component';
+import { NzColDirective } from './nz-col.directive';
describe('NzGrid', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
- imports: [NzGridModule],
- declarations: [GridListWithoutCols, GridListWithoutRows, TestSpan, TestOffset, TestPushPull, TestColResponsive, TestGutter, TestTypeFlex, TestTypeFlexOrder]
+ imports : [ NzGridModule ],
+ declarations: [ GridListWithoutCols, GridListWithoutRows, TestSpan, TestOffset, TestPushPull, TestColResponsive, TestGutter, TestTypeFlex, TestTypeFlexOrder, TestTypeEmbedded ]
}).compileComponents();
}));
describe('for cols', () => {
@@ -145,7 +145,7 @@ describe('NzGrid', () => {
const debugElement_col = fixture.debugElement.query(By.directive(NzColDirective));
// window.resizeTo(800, 600);
- testComponent._col1 = {xs: 2, xm: 4, md: 6, lg: 8, xl: 10};
+ testComponent._col1 = { xs: 2, xm: 4, md: 6, lg: 8, xl: 10 };
fixture.detectChanges();
expect(debugElement_col.nativeElement.classList.contains('ant-col-xs-2')).toBe(true);
expect(debugElement_col.nativeElement.classList.contains('ant-col-sm-4')).toBe(true);
@@ -153,7 +153,7 @@ describe('NzGrid', () => {
expect(debugElement_col.nativeElement.classList.contains('ant-col-lg-8')).toBe(true);
expect(debugElement_col.nativeElement.classList.contains('ant-col-xl-10')).toBe(true);
- testComponent._col1 = {xs: 'custom_string', xm: 4, md: 6, lg: 8, xl: 10};
+ testComponent._col1 = { xs: 'custom_string', xm: 4, md: 6, lg: 8, xl: 10 };
expect(() => {
fixture.detectChanges()
}).not.toThrow();
@@ -191,10 +191,18 @@ describe('NzGrid', () => {
const testComponentResponsive = fixtureResponsive.debugElement.componentInstance;
const debugElement_col_responsive = fixtureResponsive.debugElement.query(By.directive(NzColDirective));
debugElement_col_responsive.nativeElement.classList.add('custom-class');
- testComponentResponsive._col1 = {xs: 2, xm: 4, md: 6, lg: 8, xl: 10};
+ testComponentResponsive._col1 = { xs: 2, xm: 4, md: 6, lg: 8, xl: 10 };
fixtureResponsive.detectChanges();
expect(debugElement_col_responsive.nativeElement.classList.contains('custom-class')).toBe(true);
});
+ it('should embedded style work', () => {
+ const fixtureSpan = TestBed.createComponent(TestTypeEmbedded);
+ const debugElement_embedded_span = fixtureSpan.debugElement.query(By.directive(NzColDirective));
+ fixtureSpan.detectChanges();
+ const className = 'ant-col-xs-1 ant-col-xs-pull-1 ant-col-xs-push-1 ant-col-xs-offset-1 ant-col-xs-order-1 ant-col-sm-1 ant-col-sm-pull-1 ant-col-sm-push-1 ant-col-sm-offset-1 ant-col-sm-order-1 ant-col-md-1 ant-col-md-pull-1 ant-col-md-push-1 ant-col-md-offset-1 ant-col-md-order-1 ant-col-lg-1 ant-col-lg-pull-1 ant-col-lg-push-1 ant-col-lg-offset-1 ant-col-lg-order-1 ant-col-xl-1 ant-col-xl-pull-1 ant-col-xl-push-1 ant-col-xl-offset-1 ant-col-xl-order-1';
+ expect(debugElement_embedded_span.nativeElement.className === className).toBe(true);
+
+ });
});
describe('for rows', () => {
@@ -311,13 +319,16 @@ describe('NzGrid', () => {
function getStyle(el: DebugElement, prop: string): string {
return getComputedStyle(el.nativeElement).getPropertyValue(prop);
}
+
/** Test component that contains an nzGrid. */
-@Component({template: '
'})
+@Component({ template: '' })
class GridListWithoutCols {
}
-@Component({template: ''})
+
+@Component({ template: '' })
class GridListWithoutRows {
}
+
@Component({
selector: 'test-span',
template: `
@@ -334,6 +345,7 @@ class GridListWithoutRows {
class TestSpan {
_span = 5;
}
+
@Component({
selector: 'test-offset',
template: `
@@ -353,6 +365,7 @@ class TestOffset {
_span2 = 12;
_offset2 = 8;
}
+
@Component({
selector: 'test-push-pull',
template: `
@@ -368,6 +381,7 @@ class TestPushPull {
_push = 6;
_pull = 18;
}
+
@Component({
selector: 'test-col-responsive',
template: `
@@ -378,7 +392,7 @@ class TestPushPull {
`,
})
class TestColResponsive {
- _col1 = {xs: 2, xm: 4, md: 6, lg: 8, xl: 10};
+ _col1 = { xs: 2, xm: 4, md: 6, lg: 8, xl: 10 };
}
@Component({
@@ -400,6 +414,7 @@ class TestGutter {
_span = 6;
_gutter = 16;
}
+
@Component({
selector: 'test-type-flex',
template: `
@@ -421,6 +436,7 @@ class TestTypeFlex {
_justify = 'start';
_align = 'top'
}
+
@Component({
selector: 'test-type-flex',
template: `
@@ -439,3 +455,20 @@ class TestTypeFlexOrder {
_order1 = 1;
_order2 = 2
}
+
+@Component({
+ selector: 'test-type-embedded',
+ template: `
+
+ `
+})
+class TestTypeEmbedded {
+}
diff --git a/src/showcase/nz-demo-grid/nz-demo-grid-responsive-more.component.ts b/src/showcase/nz-demo-grid/nz-demo-grid-responsive-more.component.ts
new file mode 100644
index 00000000000..aff3901538f
--- /dev/null
+++ b/src/showcase/nz-demo-grid/nz-demo-grid-responsive-more.component.ts
@@ -0,0 +1,26 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'nz-demo-grid-responsive-more',
+ template: `
+
+
+ Col
+
+
+ Col
+
+
+ Col
+
+
`,
+ styles : []
+})
+export class NzDemoGridResponsiveMoreComponent implements OnInit {
+ constructor() {
+ }
+
+ ngOnInit() {
+ }
+}
+
diff --git a/src/showcase/nz-demo-grid/nz-demo-grid.component.ts b/src/showcase/nz-demo-grid/nz-demo-grid.component.ts
index ffd9a282d5e..a92eacf7cdc 100644
--- a/src/showcase/nz-demo-grid/nz-demo-grid.component.ts
+++ b/src/showcase/nz-demo-grid/nz-demo-grid.component.ts
@@ -18,6 +18,7 @@ export class NzDemoGridComponent implements OnInit {
NzDemoGridFlexAlignCode = require('!!raw-loader!./nz-demo-grid-flex-align.component');
NzDemoGridFlexOrderCode = require('!!raw-loader!./nz-demo-grid-flex-order.component');
NzDemoGridResponsiveCode = require('!!raw-loader!./nz-demo-grid-responsive.component');
+ NzDemoGridResponsiveMoreCode = require('!!raw-loader!./nz-demo-grid-responsive-more.component');
constructor() {
}
diff --git a/src/showcase/nz-demo-grid/nz-demo-grid.html b/src/showcase/nz-demo-grid/nz-demo-grid.html
index c4258cf7721..fcf99884d3f 100644
--- a/src/showcase/nz-demo-grid/nz-demo-grid.html
+++ b/src/showcase/nz-demo-grid/nz-demo-grid.html
@@ -138,6 +138,17 @@ Flex 布局
+
+
+
+
+ span
pull
push
offset
order
属性可以通过内嵌到 nzXs
nzSm
nzMd
nzLg
nzXl
属性中来使用。
+
+
+ 其中 [nzXs]="6"
相当于 nzXs={{'{'}}{{'{'}} span: 6 {{'}'}}{{'}'}}
+
+
+
@@ -237,31 +248,31 @@
[nz-col]
nzXs |
<768px 响应式栅格,可为栅格数或一个包含其他属性的对象 |
- Number |
+ Number|Object |
- |
nzSm |
≥768px 响应式栅格,可为栅格数或一个包含其他属性的对象 |
- Number |
+ Number|Object |
- |
nzMd |
≥992px 响应式栅格,可为栅格数或一个包含其他属性的对象 |
- Number |
+ Number|Object |
- |
nzLg |
≥1200px 响应式栅格,可为栅格数或一个包含其他属性的对象 |
- Number |
+ Number|Object |
- |
nzXl |
≥1600px 响应式栅格,可为栅格数或一个包含其他属性的对象 |
- Number |
+ Number|Object |
- |
diff --git a/src/showcase/nz-demo-grid/nz-demo-grid.module.ts b/src/showcase/nz-demo-grid/nz-demo-grid.module.ts
index bc6937131ec..dec3db80f6d 100644
--- a/src/showcase/nz-demo-grid/nz-demo-grid.module.ts
+++ b/src/showcase/nz-demo-grid/nz-demo-grid.module.ts
@@ -11,6 +11,7 @@ import { NzDemoGridFlexComponent } from './nz-demo-grid-flex.component';
import { NzDemoGridFlexAlignComponent } from './nz-demo-grid-flex-align.component';
import { NzDemoGridFlexOrderComponent } from './nz-demo-grid-flex-order.component';
import { NzDemoGridResponsiveComponent } from './nz-demo-grid-responsive.component';
+import { NzDemoGridResponsiveMoreComponent } from './nz-demo-grid-responsive-more.component';
import { NzDemoGridComponent } from './nz-demo-grid.component';
import { NzCodeBoxModule } from '../share/nz-codebox/nz-codebox.module';
@@ -20,7 +21,7 @@ import { NzDemoGridRoutingModule } from './nz-demo-grid.routing.module';
@NgModule({
imports : [ NzDemoGridRoutingModule, CommonModule, NzCodeBoxModule, NgZorroAntdModule, FormsModule ],
- declarations: [ NzDemoGridGutterConfigComponent, NzDemoGridFlexOrderComponent, NzDemoGridBasicComponent, NzDemoGridGutterComponent, NzDemoGridOffsetComponent, NzDemoGridSortComponent, NzDemoGridFlexComponent, NzDemoGridFlexAlignComponent, NzDemoGridResponsiveComponent, NzDemoGridComponent ]
+ declarations: [ NzDemoGridResponsiveMoreComponent, NzDemoGridGutterConfigComponent, NzDemoGridFlexOrderComponent, NzDemoGridBasicComponent, NzDemoGridGutterComponent, NzDemoGridOffsetComponent, NzDemoGridSortComponent, NzDemoGridFlexComponent, NzDemoGridFlexAlignComponent, NzDemoGridResponsiveComponent, NzDemoGridComponent ]
})
export class NzDemoGridModule {