2016-10-03 38 views
3

我正在使用Sematinc-UI和Angular2 ReactiveFormsModule窗體,並且我想使用[formControl]來選擇多個窗體。Angular2 formControl選擇多個

如果我使用select它的作品,沒有任何問題:

 <select class="ui fluid dropdown" [formControl]="myForm.controls.category"> 
      <option *ngFor="let item of categories" value="{{item}}">{{item}}</option> 
     </select> 

如果我使用選擇多個它不工作:

 <select multiple="" class="ui fluid dropdown" [formControl]="myForm.controls.category"> 
      <option *ngFor="let item of categories" value="{{item}}">{{item}}</option> 
     </select> 

我得到這個錯誤:

核心.umd.js:3462 EXCEPTION:未捕獲(承諾):錯誤:http://localhost:3000/app/components/category.component.js類中的錯誤CategoryComponent - 內聯模板:0:1701由:values.map不是功能

可能是什麼問題?

+0

什麼是'category.component.js'(和'.ts')它說values.map不是一個函數。 –

+0

我沒有'values'變量,也沒有'.js'文件和'.ts'文件。 – smartmouse

+0

我在找同樣的問題。我建立了FormBuilder組,當我添加''courseIds':[1,3,5]'(其中courseIds是一個多重選擇)時,它會抱怨「this.validator不是函數」。如果我傳入''courseIds':{value:[1,3,5]}'我得到「values.map不是一個函數」,因爲它現在已經傳遞了整個對象而不是數組。你如何將多個值傳遞給FormControl構造函數? – steverippl

回答

0

看看FormControl的測試(https://github.com/angular/angular/blob/master/modules/%40angular/forms/test/form_control_spec.ts)很明顯,如果你傳入一個數組,那麼第二個和隨後的值被視爲驗證器(因此上面我的評論中的第一個錯誤)。要傳入一個數組,它必須被「裝箱」(在一個對象內),但FormControl需要「禁用」屬性才能使用「value」屬性作爲值,所以最終的正確格式是'courseIds': {value: [1,3,5], disabled: false}

5

我明白了。訣竅是確保該值始終是一個數組,即使沒有選擇任何內容。

<select multiple class="ui fluid dropdown" [formControl]="myForm.controls.category"> 
    <option *ngFor="let item of categories" [ngValue]="item">{{item}}</option> 
</select> 

在創建FormControl確保空白值是空數組,而不是''undefined

this.control = new FormControl([]); 

我不使用語義UI,只是標準的角2

+0

您使用的是什麼驗證規則?無法使其工作。 –

+0

我不記得了,但我的例子顯示沒有驗證規則 - 你有沒有嘗試過嗎? –

1

在ionic2和反應形式的工作,我能驗證一個多選擇使用「必要」驗證只,MINLENGTH個()不工作。如果您不想通過驗證,則需要將null傳遞給模型。空數組將通過「必需」驗證。如果你問我,有點奇怪。