diff --git a/src/components/cascader/nz-cascader.component.ts b/src/components/cascader/nz-cascader.component.ts index 0108c00be98..f83a86dad2a 100644 --- a/src/components/cascader/nz-cascader.component.ts +++ b/src/components/cascader/nz-cascader.component.ts @@ -37,7 +37,7 @@ function noop(): void { } function toArray(value: any): any[] { let ret = value; - if (value === undefined) { + if (value === undefined || value === null) { ret = []; } else if (!Array.isArray(value)) { ret = [value]; @@ -762,6 +762,11 @@ export class NzCascaderComponent implements OnInit, OnDestroy, OnChanges, AfterV }, (reason: any) => { option.isLeaf = true; }); + } else { + // clicking leaf node will remove any children columns + if (index < this._nzColumns.length - 1) { + this._nzColumns = this._nzColumns.slice(0, index + 1); + } } // 生成显示 @@ -982,10 +987,6 @@ export class NzCascaderComponent implements OnInit, OnDestroy, OnChanges, AfterV * @Override (From ControlValueAccessor interface) */ writeValue(value: any): void { - if (value == null) { - return; - } - const array: any[] = []; toArray(value).forEach((v: any, index: number) => { if (typeof v !== 'object') { diff --git a/src/showcase/nz-demo-cascader/nz-demo-cascader-basic.component.ts b/src/showcase/nz-demo-cascader/nz-demo-cascader-basic.component.ts index 910a57866db..0c6ccd0e61a 100644 --- a/src/showcase/nz-demo-cascader/nz-demo-cascader-basic.component.ts +++ b/src/showcase/nz-demo-cascader/nz-demo-cascader-basic.component.ts @@ -11,6 +11,10 @@ const init_options = [{ label: 'West Lake', isLeaf: true }], + }, { + value: 'ningbo', + label: 'Ningbo', + isLeaf: true }], }, { value: 'jiangsu', diff --git a/src/showcase/nz-demo-cascader/nz-demo-cascader-change-on-select.component.ts b/src/showcase/nz-demo-cascader/nz-demo-cascader-change-on-select.component.ts index fbc6ebc1b7d..0b4da2466a1 100644 --- a/src/showcase/nz-demo-cascader/nz-demo-cascader-change-on-select.component.ts +++ b/src/showcase/nz-demo-cascader/nz-demo-cascader-change-on-select.component.ts @@ -11,6 +11,10 @@ const options = [{ label: 'West Lake', isLeaf: true }], + }, { + value: 'ningbo', + label: 'Ningbo', + isLeaf: true }], }, { value: 'jiangsu', diff --git a/src/showcase/nz-demo-cascader/nz-demo-cascader-custom-render.component.ts b/src/showcase/nz-demo-cascader/nz-demo-cascader-custom-render.component.ts index c96bf48c49c..4515364dbb7 100644 --- a/src/showcase/nz-demo-cascader/nz-demo-cascader-custom-render.component.ts +++ b/src/showcase/nz-demo-cascader/nz-demo-cascader-custom-render.component.ts @@ -12,6 +12,10 @@ const options = [{ code: 752100, isLeaf: true }], + }, { + value: 'ningbo', + label: 'Ningbo', + isLeaf: true }], }, { value: 'jiangsu', diff --git a/src/showcase/nz-demo-cascader/nz-demo-cascader-custom-trigger.component.ts b/src/showcase/nz-demo-cascader/nz-demo-cascader-custom-trigger.component.ts index ec6b73da591..87ae55631f4 100644 --- a/src/showcase/nz-demo-cascader/nz-demo-cascader-custom-trigger.component.ts +++ b/src/showcase/nz-demo-cascader/nz-demo-cascader-custom-trigger.component.ts @@ -11,6 +11,10 @@ const options = [{ label: 'West Lake', isLeaf: true }], + }, { + value: 'ningbo', + label: 'Ningbo', + isLeaf: true }], }, { value: 'jiangsu', diff --git a/src/showcase/nz-demo-cascader/nz-demo-cascader-default-value.component.ts b/src/showcase/nz-demo-cascader/nz-demo-cascader-default-value.component.ts index ddfeca5ded7..608ce17e26f 100644 --- a/src/showcase/nz-demo-cascader/nz-demo-cascader-default-value.component.ts +++ b/src/showcase/nz-demo-cascader/nz-demo-cascader-default-value.component.ts @@ -11,6 +11,10 @@ const options = [{ label: 'West Lake', isLeaf: true }], + }, { + value: 'ningbo', + label: 'Ningbo', + isLeaf: true }], }, { value: 'jiangsu', diff --git a/src/showcase/nz-demo-cascader/nz-demo-cascader-disabled.component.ts b/src/showcase/nz-demo-cascader/nz-demo-cascader-disabled.component.ts index 6d42f191141..a7c310f8c12 100644 --- a/src/showcase/nz-demo-cascader/nz-demo-cascader-disabled.component.ts +++ b/src/showcase/nz-demo-cascader/nz-demo-cascader-disabled.component.ts @@ -11,6 +11,10 @@ const options = [{ label: 'West Lake', isLeaf: true }], + }, { + value: 'ningbo', + label: 'Ningbo', + isLeaf: true }], }, { value: 'jiangsu', diff --git a/src/showcase/nz-demo-cascader/nz-demo-cascader-hover.component.ts b/src/showcase/nz-demo-cascader/nz-demo-cascader-hover.component.ts index ca8219098c3..c73d745a6d3 100644 --- a/src/showcase/nz-demo-cascader/nz-demo-cascader-hover.component.ts +++ b/src/showcase/nz-demo-cascader/nz-demo-cascader-hover.component.ts @@ -11,6 +11,10 @@ const options = [{ label: 'West Lake', isLeaf: true }], + }, { + value: 'ningbo', + label: 'Ningbo', + isLeaf: true }], }, { value: 'jiangsu', diff --git a/src/showcase/nz-demo-cascader/nz-demo-cascader-lazy.component.ts b/src/showcase/nz-demo-cascader/nz-demo-cascader-lazy.component.ts index a287251f074..ceeed274c6f 100644 --- a/src/showcase/nz-demo-cascader/nz-demo-cascader-lazy.component.ts +++ b/src/showcase/nz-demo-cascader/nz-demo-cascader-lazy.component.ts @@ -12,6 +12,10 @@ const cities = { zhejiang: [{ value: 'hangzhou', label: 'Hangzhou', + }, { + value: 'ningbo', + label: 'Ningbo', + isLeaf: true }], jiangsu: [{ value: 'nanjing', diff --git a/src/showcase/nz-demo-cascader/nz-demo-cascader-reactive-form.component.ts b/src/showcase/nz-demo-cascader/nz-demo-cascader-reactive-form.component.ts new file mode 100644 index 00000000000..79a84497410 --- /dev/null +++ b/src/showcase/nz-demo-cascader/nz-demo-cascader-reactive-form.component.ts @@ -0,0 +1,84 @@ +import {Component, OnInit} from '@angular/core'; +import { FormBuilder, FormGroup, Validators } from '@angular/forms'; + +const init_options = [{ + value: 'zhejiang', + label: 'Zhejiang', + children: [{ + value: 'hangzhou', + label: 'Hangzhou', + children: [{ + value: 'xihu', + label: 'West Lake', + isLeaf: true + }], + }, { + value: 'ningbo', + label: 'Ningbo', + isLeaf: true + }], +}, { + value: 'jiangsu', + label: 'Jiangsu', + children: [{ + value: 'nanjing', + label: 'Nanjing', + children: [{ + value: 'zhonghuamen', + label: 'Zhong Hua Men', + isLeaf: true + }], + }], +}]; + +@Component({ + selector: 'nz-demo-cascader-reactive-form', + template: ` +
+创建响应式表单组件,并通过 reset()
方法重置数值。