最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ng-alain表單使用方式詳解

 更新時(shí)間:2018年07月10日 11:06:23   作者:cipchk  
這篇文章主要介紹了ng-alain表單使用方式詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

Angular表單

Angular提供兩種不同的架構(gòu)范式表單:模板驅(qū)動(dòng)和響應(yīng)式表單,官網(wǎng)也簡(jiǎn)單實(shí)現(xiàn)了動(dòng)態(tài)表單范例。

當(dāng)使用兩種不同范式構(gòu)建一個(gè)用戶必填性的表單,在使用上有非常大的不同:

模板驅(qū)動(dòng)

@Component({
  template: `
  <form nz-form (ngSubmit)="onSubmit()">
    <nz-form-item>
      <nz-form-label nzRequired nzFor="name">Name</nz-form-label>
      <nz-form-control>
        <input [(ngModel)]="model.name" name="name" id="name" required #name="ngModel">
        <nz-form-explain [hidden]="name.valid || name.pristine">Name is required</nz-form-explain>
      </nz-form-control>
    </nz-form-item>
  </form>`
})
export class DemoComponent {
}

響應(yīng)式

@Component({
  template: `
  <form nz-form [formGroup]="heroForm" (ngSubmit)="onSubmit()">
    <nz-form-item>
      <nz-form-label nzRequired nzFor="name">Name</nz-form-label>
      <nz-form-control>
        <input formControlName="name">
        <nz-form-explain [hidden]="name.valid || name.pristine">Name is required</nz-form-explain>
      </nz-form-control>
    </nz-form-item>
  </form>`
})
export class DemoComponent {
  ngOnInit(): void {
    this.heroForm = new FormGroup({
      name: new FormControl('', [Validators.required])
    });
  }
  
  get name() { return this.heroForm.get('name'); }
}

上述示例只提供核心代碼

誠如模板驅(qū)動(dòng)和響應(yīng)式表單的名稱一樣。模板驅(qū)動(dòng)以HTML編程風(fēng)格為主,并且由 ngModel 創(chuàng)建表單控件對(duì)象及數(shù)據(jù)模型管理,相比較響應(yīng)式表單使用更少的代碼(雖然看起來是這樣)。

假如對(duì)測(cè)試非常在意,那么毋庸置疑響應(yīng)式表單更適合你,因?yàn)槎叩牧硪粋€(gè)重要區(qū)別是響應(yīng)式表單數(shù)據(jù)模型及有效性信息都是同步行為,你可以更容易的測(cè)試他它們。

ng-alain表單構(gòu)建方式

當(dāng)然這一切都跟 ng-alain 并沒有任何決定性關(guān)聯(lián),ng-alain 只是從使用的角度進(jìn)一步優(yōu)化二者的使用方式來做改變。

示例中不管是以HTML、還是以編程風(fēng)格為主,總是需要很多額外的代碼來做布局。

方式一:簡(jiǎn)易HTML模板表單

因此,當(dāng)你是以HTML模板為主的表單開發(fā),則簡(jiǎn)易HTML模板表單組件:shf-item 可能會(huì)更適合你,若將上述的示例使用 shf-item 來改變將會(huì)這樣:

@Component({
  template: `
  <form nz-form (ngSubmit)="onSubmit()" shf-wrap>
    <shf-item label="App Key">
      <input [(ngModel)]="model.name" name="name" required #name="ngModel">
      <nz-form-explain [hidden]="name.valid || name.pristine">Name is required</nz-form-explain>
    </shf-item>
  </form>`
})
export class DemoComponent {
}

以之相對(duì)于的響應(yīng)式表單略同,組件單純只是進(jìn)一步優(yōu)化使用方式。

關(guān)于錯(cuò)誤反饋

錯(cuò)誤反饋包含視覺與信息文本兩種,上述示例以信息文本為主(嗯,提示必填性真傻)。

視覺效果在ng-zorro-antd里,是將目標(biāo)元素以紅色邊框線來表示(因此對(duì)于那些沒有邊框或沒有特殊處理的都無法體現(xiàn))。

建議:除特殊錯(cuò)誤文本以外,可以只考慮以視覺效果來反饋錯(cuò)誤。

關(guān)于校驗(yàn)

Angular 實(shí)現(xiàn)了部分HTML5標(biāo)準(zhǔn)常規(guī)屬性,例如:required、maxlength 等等;而 ng-zorro-antd 的所有數(shù)據(jù)錄入組件都包含了一些額外的數(shù)據(jù)限定條件,例如:nz-input-number 有效范圍(nzMin、nzMax、nzStep)。當(dāng)然可以進(jìn)一步歸納業(yè)務(wù)校驗(yàn)邏輯,例如異步校驗(yàn)手機(jī)號(hào)碼 mobile (可參考RequiredValidator)。

小結(jié)

shf-item 是以簡(jiǎn)化HTML布局開發(fā)的組件,自身會(huì)維護(hù) ngModel 的狀態(tài)變化并對(duì)目標(biāo)元素增加 .has-error 樣式類名,它始終保持視覺效果的體現(xiàn)。

方式二:動(dòng)態(tài)表單

動(dòng)態(tài)表單 @delon/form 是一個(gè)基于 JSON Schema 標(biāo)準(zhǔn)的動(dòng)態(tài)構(gòu)建表單;它是一個(gè)獨(dú)立的類庫,你可以在任何 ng-zorro-antd 項(xiàng)目中使用。

同樣以相同的示例,其代碼會(huì)有趣得多:

@Component({
  template: `<sf [schema]="schema" (formSubmit)="submit($event)"></sf>`
})
export class DemoComponent {
  schema: SFSchema = {
    properties: {
      name: { type: 'string' }
    },
    required: [ 'name' ]
  }
}

動(dòng)態(tài)表單始終以一個(gè)JSON對(duì)象來構(gòu)建表單,哪怕該對(duì)象來自遠(yuǎn)程。

@delon/form 內(nèi)置僅實(shí)現(xiàn) ng-zorro-antd 數(shù)據(jù)錄入組件部分,你依然可以通過自定義小部件 方法實(shí)現(xiàn)一套屬于自己業(yè)務(wù)部件庫。

數(shù)據(jù)結(jié)構(gòu)與UI

一個(gè)完整的表單元素我們認(rèn)為應(yīng)該包含以下若干元素:

JSON Schema 重點(diǎn)在于數(shù)據(jù)結(jié)構(gòu)校驗(yàn),而對(duì)于UI層面可以通過 <sf [ui]="ui"> 來額外增強(qiáng) UI 渲染,例如:

schema = {
 properties: {
  url: {
   type: 'string',
   title: 'Web Site'
  }
 }
}

一個(gè)URL屬性,若我們不希望用于添加 https:// 前綴的情況下,就單純的 JSON Schema 結(jié)構(gòu)是無法表述,而 nz-input 又支持非常豐富的前后綴文本,則我們可以為 ui 定制并增加 https:// 的前綴文本:

ui = {
 $url: {
  addOnBefore: 'https://'
 }
}

ui 本身也是一個(gè) JSON 結(jié)構(gòu),為了區(qū)分 JSON Schema 屬性名的對(duì)應(yīng)關(guān)系,必須統(tǒng)一對(duì)屬性名加上 $ 前綴。

小結(jié)

動(dòng)態(tài)表單并不是基于 @angular/form 來構(gòu)建的,但本質(zhì)是略同,通過 Observable 監(jiān)聽數(shù)據(jù)流后使用ajv 校驗(yàn)、錯(cuò)誤反饋。

總結(jié)

總的來說在 ng-alain 里可以采用 Angular 表單和動(dòng)態(tài)表單兩種方式,而 Angular 表單又有兩種不同的架構(gòu)范式表單:模板驅(qū)動(dòng)和響應(yīng)式表單。

前者若單純使用 ng-zorro-antd 相對(duì)于缺少更加簡(jiǎn)潔的開發(fā)方法,shf 只是一個(gè)簡(jiǎn)潔的表現(xiàn)形式。

后者是一種比較可愛又相對(duì)通用的方式,因?yàn)镴SON Schema規(guī)范是統(tǒng)一的,不管哪種前端框架都是相通。

 以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • angular基于路由控制ui-router實(shí)現(xiàn)系統(tǒng)權(quán)限控制

    angular基于路由控制ui-router實(shí)現(xiàn)系統(tǒng)權(quán)限控制

    這篇文章主要介紹了angular基于路由控制ui-router實(shí)現(xiàn)系統(tǒng)權(quán)限控制的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 關(guān)于AngularJS中ng-repeat不更新視圖的解決方法

    關(guān)于AngularJS中ng-repeat不更新視圖的解決方法

    今天小編就為大家分享一篇關(guān)于AngularJS中ng-repeat不更新視圖的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • AngularJS通過ng-Img-Crop實(shí)現(xiàn)頭像截取的示例

    AngularJS通過ng-Img-Crop實(shí)現(xiàn)頭像截取的示例

    本篇文章主要介紹了AngularJS通過ng-Img-Crop實(shí)現(xiàn)頭像截取的示例,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • Angular中支持SCSS的方法

    Angular中支持SCSS的方法

    這篇文章主要介紹了Angular中支持SCSS的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • 利用Angular.js限制textarea輸入的字?jǐn)?shù)

    利用Angular.js限制textarea輸入的字?jǐn)?shù)

    相信在大家已經(jīng)學(xué)習(xí)了足夠多關(guān)于AngularJS的知識(shí)后,就可以開始創(chuàng)建第一個(gè)AngularJS應(yīng)用程序,這篇文章通過示例給大家介紹如何利用Angular.js限制textarea輸入的字?jǐn)?shù),有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-10-10
  • 使用Angular CLI進(jìn)行Build(構(gòu)建)和Serve詳解

    使用Angular CLI進(jìn)行Build(構(gòu)建)和Serve詳解

    這篇文章主要介紹了使用Angular CLI進(jìn)行Build(構(gòu)建)和Serve詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • angularjs 源碼解析之scope

    angularjs 源碼解析之scope

    $scope 的使用貫穿整個(gè) Angular App 應(yīng)用,它與數(shù)據(jù)模型相關(guān)聯(lián),同時(shí)也是表達(dá)式執(zhí)行的上下文.有了 $scope 就在視圖和控制器之間建立了一個(gè)通道,基于作用域視圖在修改數(shù)據(jù)時(shí)會(huì)立刻更新 $scope,同樣的 $scope 發(fā)生改變時(shí)也會(huì)立刻重新渲染視圖.
    2016-08-08
  • 對(duì)Angular中單向數(shù)據(jù)流的深入理解

    對(duì)Angular中單向數(shù)據(jù)流的深入理解

    這篇文章主要給大家介紹了關(guān)于對(duì)Angular中單向數(shù)據(jù)流的深入理解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • angular中的http攔截器Interceptors的實(shí)現(xiàn)

    angular中的http攔截器Interceptors的實(shí)現(xiàn)

    本篇文章主要介紹了angular中的http攔截器Interceptors的實(shí)現(xiàn)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Angularjs中數(shù)據(jù)綁定的實(shí)例詳解

    Angularjs中數(shù)據(jù)綁定的實(shí)例詳解

    這篇文章主要介紹了Angularjs中數(shù)據(jù)綁定的實(shí)例詳解的相關(guān)資料,這里提供簡(jiǎn)單實(shí)例,大家可以參考下,希望通過本文可以掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08

最新評(píng)論

邓州市| 鄂托克前旗| 武隆县| 盐亭县| 新丰县| 东至县| 鞍山市| 资兴市| 修水县| 阿图什市| 伊宁县| 青川县| 宜兰市| 五家渠市| 余江县| 乌兰县| 神农架林区| 项城市| 泗阳县| 叶城县| 澎湖县| 宜城市| 武清区| 沭阳县| 台南县| 秦安县| 洛扎县| 湖口县| 通城县| 五台县| 澄城县| 象山县| 美姑县| 集贤县| 临高县| 九龙县| 扶余县| 梧州市| 门源| 临邑县| 浪卡子县|