Angular 7 FormBuilder的多选初始化值无效

时间:2018-12-18 12:59:50

标签: angular validation formbuilder

我在用选择多个控件初始化fromgroup时遇到问题。 初始化运行正常,但是将from标记为无效。

Selissues  11
Genissues 68
Noissues  7
Otherissues  13
Total  99999
Pruning/OtherEfficiency .58064516129032258064
CSEfficiency .38888888888888888888

现在,当用户在多项选择中选择一个或多个任务时,表单组将变为有效。

{{controlPanelForm.value | json}} -> tasks: ["3","1","5"]
{{controlPanelForm.status | json}} -> "INVALID"

我需要formGroup从初始化开始有效。 提前致谢。 //// html

{{controlPanelForm.value | json}} -> tasks: ["3","1","5"]
{{controlPanelForm.status | json}} -> "VALID"

////// ts

<form [formGroup]="controlPanelForm" (ngSubmit)="submit()">
    <select multiple id="tasks" size="7" [formControl]="controlPanelForm.get('tasks')">
        <option *ngFor="let t of projectTasks" [ngValue]="t.id">{{t.title}}</option>
    </select>
</form>
<div>
    {{controlPanelForm.value | json}}
</div>
<div>
    {{controlPanelForm.status | json}}
</div>

2 个答案:

答案 0 :(得分:0)

您的表单由

定义
'tasks': [[this.projectTasksIds], ...

这意味着一旦被请求,您的价值就会变成

form.tasks = [[1, 2, 3]]

但这不是问题所在(尽管您应该更正它)。问题是您有此数据

projectTasks: ProjectTask[] =[
    {id:'3', title:'title3'},
    {id:'1', title:'title1'},
    {id:'5', title:'title5'},
]

然后您对此进行迭代

this.projectTasks.tasks.map(...)

它不存在!这意味着您的数组为空,因此您的值为空。

答案 1 :(得分:0)

问题出在同步!任务的值:[“ 3”,“ 1”,“ 5”]来自ajax。因此,当窗体初始化时,值是:[]。为了解决问题,我在ajax响应上使用了controlPanelForm.patchValues(...)方法。 希望对其他有相同问题的人有所帮助。