Angular checkbox 遭遇雙向綁定問(wèn)題

初學(xué)Angular 時(shí)遇到過(guò)關(guān)于checkbox 雙向綁定的問(wèn)題,看代碼:

愛(ài)好:
    <span *ngFor="let item of userInfo.hobby; let key = index;">
      <input type="checkbox" [id]="'check'+key" [(ngModel)]="item.checked" /><label [for]="'check'+key">{{item.title}}</label>
    </span>
userInfo = {
    hobby: [
      {title: '跑步', checked: false}, 
      {title: '登山', checked: true}, 
      {title: '游泳', checked: true}, 
      {title: '手游', checked: false}
    ]
  };

運(yùn)行后,控制臺(tái)報(bào)錯(cuò):

ERROR Error: "If ngModel is used within a form tag, either the name attribute must be set or the form
      control must be defined as 'standalone' in ngModelOptions.

      Example 1: <input [(ngModel)]="person.firstName" name="first">
      Example 2: <input [(ngModel)]="person.firstName" [ngModelOptions]="{standalone: true}">"
    Angular 9
    View_RegisterFormComponent_2 RegisterFormComponent.html:17
    Angular 31
RegisterFormComponent.html:17:6

嗯嗯,意思是如果使用ngModel,那么必須要給form 標(biāo)簽添加name,或者使用[ngModelOptions]="{standalone: true}"。

添加name后,錯(cuò)誤消失,但又出現(xiàn)新的問(wèn)題。我的初始值之中‘登山’和‘游泳’是要被選中的,然鵝,運(yùn)行后并沒(méi)有選中,反復(fù)折騰后,終于發(fā)現(xiàn)問(wèn)題所在。因?yàn)槲宜械腸heckbox 使用的name 相同,而checkbox 的checked attr(關(guān)于attr 和prop 的區(qū)別請(qǐng)自行查找)的值以最后一個(gè)checkbox 的值為準(zhǔn)(原理沒(méi)搞懂)。也就是說(shuō),最后一個(gè)為true,則所有的都選中,最后一個(gè)為false,則都不選中。。。

無(wú)奈之下,我將name 刪除,用了第二種解決方案,即使用[ngModelOptions]="{standalone: true}",這一次成功初始化,該選的都選了。

雖然功能沒(méi)問(wèn)題了,但我還是有點(diǎn)小糾結(jié),就不能給checkbox 設(shè)置name 嗎?可能谷歌覺(jué)得使用了雙向綁定,你沒(méi)必要在使用form 表單提交來(lái)獲取數(shù)據(jù)吧!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,886評(píng)論 1 45
  • 第一章 入門 基本功能:訪問(wèn)和操作 dom 元素,控制頁(yè)面樣式,對(duì)頁(yè)面的事件處理,與ajax完美結(jié)合,有豐富的插件...
    X_Arts閱讀 1,155評(píng)論 0 2
  • AngularJS是什么?AngularJs(后面就簡(jiǎn)稱ng了)是一個(gè)用于設(shè)計(jì)動(dòng)態(tài)web應(yīng)用的結(jié)構(gòu)框架。首先,它是...
    200813閱讀 1,806評(píng)論 0 3
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵勝奧閱讀 5,203評(píng)論 0 1
  • //注意: 操作checkbox的checked,disabled屬性時(shí)jquery1.6以前版本用attr,1....
    Mannixxx閱讀 2,552評(píng)論 0 0

友情鏈接更多精彩內(nèi)容