이것은 나를 미치게 만들고 있습니다. 나는 총을 받고 있으며 하루 종일 이것에 대해 여유를 가질 수 없습니다.
구성 요소 내에서 수동으로 제어 값 ( ‘dept’)을 설정하려고하는데 작동하지 않습니다. 새로운 값조차도 콘솔에 올바르게 기록됩니다.
FormBuilder 인스턴스는 다음과 같습니다.
initForm() {
this.form = this.fb.group({
'name': ['', Validators.required],
'dept': ['', Validators.required],
'description': ['', Validators.required],
});
}
선택한 부서를 수신하는 이벤트 핸들러입니다.
deptSelected(selected: { id: string; text: string }) {
console.log(selected) // Shows proper selection!
// This is how I am trying to set the value
this.form.controls['dept'].value = selected.id;
}
이제 양식을 제출하고 로그 아웃 this.form
하면 필드가 여전히 비어 있습니다! 다른 ppl 사용을 updateValue()
보았지만 이것은 베타 1이며 컨트롤을 호출하는 유효한 방법으로 보지 못합니다.
나는 또한 updateValueAndValidity()
성공하지 않고 전화 를 시도했다 :(.
ngControl="dept"
양식의 나머지 부분을 사용하지만 사용자 지정 지시문 / 구성 요소를 사용 하는 것처럼 양식 요소에 사용 하려고합니다.
<ng-select
[data]="dept"
[multiple]="false"
[items]="depts"
(selected)="deptSelected($event)" <!-- This is how the value gets to me -->
[placeholder]="'No Dept Selected'"></ng-select>
답변
업데이트 날짜 : 19/03/2017
this.form.controls['dept'].setValue(selected.id);
낡은:
지금은 타입 캐스트를해야합니다 :
(<Control>this.form.controls['dept']).updateValue(selected.id)
매우 우아하지 않습니다. 향후 버전에서 이것이 개선되기를 바랍니다.
답변
RC5 + (Angular 2 Final)에는 양식 값을 업데이트하기위한 새로운 API가 있습니다. patchValue()
API 방법은 우리가 단지 일부 필드를 지정해야 부분적인 형태로 업데이트를 지원합니다 :
this.form.patchValue({id: selected.id})
setValue()
모든 양식 필드가있는 객체가 필요한 API 메소드 도 있습니다. 누락 된 필드가 있으면 오류가 발생합니다.
답변
Aangular 2 final은 API를 업데이트했습니다. 그들은 이것을 위해 많은 방법을 추가했습니다.
컨트롤러에서 폼 컨트롤을 업데이트하려면 다음과 같이하십시오 :
this.form.controls['dept'].setValue(selected.id);
this.form.controls['dept'].patchValue(selected.id);
오류를 재설정 할 필요가 없습니다
참고 문헌
https://angular.io/docs/ts/latest/api/forms/index/FormControl-class.html
https://toddmotto.com/angular-2-form-controls-patch-value-set-value
답변
다음 방법을 사용하여 반응 형 컨트롤의 값을 업데이트 할 수 있습니다. 다음 방법 중 하나가 필요에 적합합니다.
setValue ()를 사용하는 메소드
this.form.get("dept").setValue(selected.id);
this.form.controls["dept"].setValue(selected.id);
patchValue ()를 사용하는 메소드
this.form.get("dept").patchValue(selected.id);
this.form.controls['dept'].patchValue(selected.id);
this.form.patchValue({"dept": selected.id});
마지막 방법은 양식의 모든 컨트롤을 철저히 반복하므로 단일 컨트롤을 업데이트 할 때는 바람직하지 않습니다
이벤트 핸들러 내부의 모든 메소드를 사용할 수 있습니다
deptSelected(selected: { id: string; text: string }) {
// any of the above method can be added here
}
필요한 경우 양식 그룹에서 여러 컨트롤을 업데이트 할 수 있습니다.
this.form.patchValue({"dept": selected.id, "description":"description value"});
답변
당신은 이것을 시도 할 수 있습니다 :
deptSelected(selected: { id: string; text: string }) {
console.log(selected) // Shows proper selection!
// This is how I am trying to set the value
this.form.controls['dept'].updateValue(selected.id);
}
자세한 내용은 https://github.com/angular/angular/blob/master/modules/angular2/src/common/forms/modelupdateValue
메소드 의 두 번째 매개 변수와 관련된 해당 JS Doc을 참조하십시오. ts # L269 .
답변
이 중 어느 것도 나를 위해 일하지 않았습니다. 나는해야했다 :
this.myForm.get('myVal').setValue(val);
답변
let cloneObj = Object.assign({}, this.form.getRawValue(), someClass);
this.form.complexForm.patchValue(cloneObj);
각 필드를 수동으로 설정하지 않으려면