2017-10-06 69 views
1

我正在創建一個註冊表單,並且必須處理通過* ngFor結構指令生成的多個複選框。Angular 2 - 處理多個複選框選中狀態

模板:

<div class="form-group"> 
     <label class="col-lg-3 control-label">Response Type</label> 
     <div class="col-lg-7"> 
      <div class="checkbox" *ngFor="let type of client.responseTypes; let i = index"> 
      <label> 
       <input type="checkbox" name="responseTypes" [(ngModel)]="client.responseTypes[i].checked" /> {{type.value}} 
      </label> 
      </div> 
     </div> 
     </div> 

TS模型對象:

client.responseTypes = [ 
{ value: 'type1', checked: false}, 
      { value: 'type2', checked: true }, 
      { value: 'type3', checked: true } 
]; 

幕後的實際值選中還是未選中被正確地存儲。但是,複選框不顯示正確的值。

  • 如果三者之一objects.checked ==假的,所有的複選框會顯示未選中
  • 只有這三個objects.checked == true,所有三會的形式進行檢查。

enter image description here

我試圖與輸入元素上[value]="client.responseTypes[i].checked"[checked]="client.responseTypes[i].checked"擺弄,但都沒有成功。

任何指向正確方向的指針都受到大量讚賞。

的問候,克里斯

+1

無法重現。請檢查此https://stackblitz.com/edit/angular-hoemtb?file=app%2Fapp.component.ts – yurzui

+0

哇,這是超級怪異的...我不知道什麼或如何觸發不需要的行爲在我的應用。 – cdslijngard

+0

@yurzui問題是由於我的模板代碼在

元素中。它會引起我不想要的行爲。 – cdslijngard

回答

0

好吧船尾呃試圖圍繞我的頭爲什麼我的本地應用程序沒有顯示我想要的結果,我開始複製和粘貼我的表單組出來的<form></form>元素。

Ta-daa,它現在的作品。

供參考:放置* ng對於<form></form>元素內的複選框會導致不需要的行爲。

+0

看看這個了https://stackoverflow.com/questions/44476677/ngmodel-cannot-detect-array-changes-correctly – yurzui

+0

嗨yurzui,謝謝你的深入評論在那個線程上,幫助了很多。 – cdslijngard

+1

不客氣! – yurzui

0

語法是好的,好了,你也能做到

<input type="checkbox" name="responseTypes" [(ngModel)]="type.checked"> 

問題是在其他地方(當你定義的客戶 - 我想你寫一些這樣的。 client.responseTypes = ...-),你可以寫

{{client |json }} 

檢查它

+0

謝謝,但沒有幫助。 yurzui爲我提供了一個顯示我的確切代碼的stackblitz,它在這個平臺上工作。不知道什麼是我的應用程序出了什麼問題... – cdslijngard

0

在角與名稱每個模型綁定,意味着你需要給唯一的名稱給每個窗體elements`

例如:

<div class="form-group"><label class="col-lg-3 control-label">Response Type</label> 
    <div class="col-lg-7"> 
     <div class="checkbox" *ngFor="let type of client.responseTypes; let i = index"> 
     <label> 
      <input type="checkbox" name="type.id" [(ngModel)]="client.responseTypes[i].checked" /> {{type.value}} 
     </label> 
     </div> 
    </div> 
    </div> 

對象:

client.responseTypes = [{id: '1', value: 'type1', checked: false}, 
     {id: '2', value: 'type2', checked: true }, 
     {id: '3', value: 'type3', checked: true }]; 

而且現在檢查:)謝謝

+0

嗨,Memon,我試過你的建議。我的HTML包裝在您的解決方案中的元素中,對我來說似乎不起作用。感謝您的努力! – cdslijngard