2016-10-03 57 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传递给模型。空数组将通过“必需”验证。如果你问我,有点奇怪。