成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Angular 響應式表單之下拉框

siberiawolf / 3431人閱讀

摘要:問題分析下拉框綁定的改變時,但是值卻沒有改變,導致檢查錯誤。性別下拉框的男女保密點擊刪除保密男女此時就尷尬了,中已經(jīng)沒有保密選項了,但是下拉框綁定的卻還是。自定義控件中當更新后,不再中,重置為刪除后使用男女

1、問題分析

下拉框綁定的 options 改變時,但是 value 值卻沒有改變,導致檢查錯誤。

在線預覽

git倉庫

2、代碼分析

項目中遇到一個問題,選擇司機,是一個下拉列表。這個司機列表是一個動態(tài)列表,當你選擇的司機不再列表中,可以添加司機,然后再選擇;也有可能你選擇了司機,還未提交時,這個司機就被刪除了,需要給出錯誤提示。

簡化一下需要,性別選擇,選中了保密后,刪除這個選項。

性別下拉框的 options

sexOptions: Option[] = [
    { value: "man", display: "男" },
    { value: "woman", display: "女" },
    { value: "secret", display: "保密" },
  ];

點擊刪除保密

 delete() {
    this.sexOptions = [
      { value: "man", display: "男" },
      { value: "woman", display: "女" },
    ];
  }

此時就尷尬了,options 中已經(jīng)沒有保密選項了,但是下拉框綁定的value 卻還是 secret。

表單值:{ "sex": "secret" }

現(xiàn)在在刪除事件中添加一個重置表單控件的條件,即可解決問題

delete() {
    this.sexOptions = [
      { value: "man", display: "男" },
      { value: "woman", display: "女" },
    ];
    this.formGroup.get("sex").reset();
  }

表單的 reset() 方法只是讓表單的控件置為 null, 很不友好。如果沒有選擇 保密選擇 ,點擊刪除按鈕,值也會被置為空;項目中的選擇司機是批量上傳,控件有很多,如果重置,會讓用戶重新輸入,不是很好。

如果這個下拉控件是自定義的,就很好解決了,在 ngOnChanges 時檢查當前控件的 value 在不在 options 的 value 中,如果不再則 value 置為 null,并且控件使用 updateValueAndValidity 方法,重新計算控件的值和校驗狀態(tài)。

// 自定義控件中

ngOnChanges() {
    // 當 optionList 更新后, value 不再 optionList 中,重置 value 為 null
    const isReset = this.optionList.some(item => item.value === this.value);

    if (!isReset) {
      this.value = null;
    }
  }

// 刪除后使用 updateValueAndValidity
delete() {
    this.sexOptions = [
      { value: "man", display: "男" },
      { value: "woman", display: "女" },
    ];
    this.formGroup.get("sex").updateValueAndValidity();
  }

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102357.html

相關文章

  • angular4 學習記錄 -- 表單

    摘要:在表單上添加的會攔截標準的表單提交事件。并為它們提供了一些共同的行為和屬性,其中有些是可觀察對象。用于跟蹤一個單獨的表單控件的值和有效性狀態(tài)。組件中的頂級表單就是一個。在表單所在的中的上添加,再在指定的驗證方法中調(diào)用來顯示驗證失敗信息。 angular4 表單 模板表單 在app.module中導入FormsModule之后,項目中的form表單都會是一個ngForm,也就是一個模板表...

    james 評論0 收藏0
  • angular6的響應表單

    摘要:在模塊里面引入要使用響應式表單,就要從包中導入,并把它添加到你的的數(shù)組中。導入驗證器函數(shù)響應式表單包含了一組開箱即用的常用驗證器函數(shù)。這些驗證器屬性可以和響應式表單提供的內(nèi)置驗證器組合使用。 1:在AppModule模塊里面引入 ReactiveFormsModule 要使用響應式表單,就要從@angular/forms包中導入ReactiveFormsModule,并把它添加到你的N...

    alogy 評論0 收藏0
  • angular6的響應表單

    摘要:在模塊里面引入要使用響應式表單,就要從包中導入,并把它添加到你的的數(shù)組中。導入驗證器函數(shù)響應式表單包含了一組開箱即用的常用驗證器函數(shù)。這些驗證器屬性可以和響應式表單提供的內(nèi)置驗證器組合使用。 1:在AppModule模塊里面引入 ReactiveFormsModule 要使用響應式表單,就要從@angular/forms包中導入ReactiveFormsModule,并把它添加到你的N...

    hzc 評論0 收藏0
  • angular6的響應表單

    摘要:在模塊里面引入要使用響應式表單,就要從包中導入,并把它添加到你的的數(shù)組中。導入驗證器函數(shù)響應式表單包含了一組開箱即用的常用驗證器函數(shù)。這些驗證器屬性可以和響應式表單提供的內(nèi)置驗證器組合使用。 1:在AppModule模塊里面引入 ReactiveFormsModule 要使用響應式表單,就要從@angular/forms包中導入ReactiveFormsModule,并把它添加到你的N...

    MycLambert 評論0 收藏0
  • JavaScript 資源大全中文版

    摘要:官網(wǎng)全新的靜態(tài)包管理器。官網(wǎng)一個整合和官網(wǎng)的最佳思想,使開發(fā)者能快速方便地組織和編寫前端代碼的下一代包管理器。官網(wǎng)小巧的兼容的所見即所得的富文本編輯器。官網(wǎng)富文本編輯器。官網(wǎng)由制作,適用于每天寫作的富文本編輯器。 1. 包管理器 管理著 javascript 庫,并提供讀取和打包它們的工具。 npm:npm 是 javascript 的包管理器。官網(wǎng) cnpm:cnpm 是 由于國...

    jzman 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<