FormArray
を使用して動的複製を達成しようとしていましたが、できませんでした。フォームはJSFiddleでご確認ください。formArrayを使用してコントロールを動的に複製できません
<div class="form-group">
<div formArrayName="nqCoordinators">
<button class="col-md-offset-1 col-md-1 btn btn-default" type="button">
Add Coordinator
</button>
<div class="form-group" [ngClass]="{'has-error': (agencyForm.get('nqCoordinators').touched || agencyForm.get('nqCoordinators').dirty) && !agencyForm.get('nqCoordinators').valid}"
*ngFor="let nqCoordinator of nqCoordinators.controls; let i=index">
<label class="col-md-2 control-label" [attr.for]="i">Coordinator</label>
<div class="col-md-8">
<input class="form-control" id="i" type="text" placeholder="NQ Coordinator" formControlName="i" />
</div>
</div>
</div>
</div>
component.ts
import {
Component,
OnInit
}
from '@angular/core';
import {
FormGroup,
FormControl,
FormBuilder,
Validators,
FormArray
}
from '@angular/forms';
import {
ActivatedRoute,
Router
}
from '@angular/router';
import {
Subscription
}
from 'rxjs/Subscription';
@Component({
templateUrl: './newq.component.html'
})
export class CreateNewQComponent implements OnInit {
pageTitle: string;
agencyForm: FormGroup;
private sub: Subscription;
get nqCoordinators(): FormArray {
return <FormArray>this.agencyForm.get('nqCoordinators');
}
constructor(private route: ActivatedRoute, private fb: FormBuilder, private router: Router) {}
//myOptions: IMultiSelectOption[] = [
// { id: 1, name: 'Option 1' },
// { id: 2, name: 'Option 2' },
//];
ngOnInit(): void {
this.agencyForm = this.fb.group({
nqCoordinators: this.fb.array([]),
//qAdvisors: '',
nq1: '',
nq2: '',
nq3: '',
nq4: '',
nqCoordinators: this.fb.array([]),
nqStartDate: ''
});
this.agencyForm.controls['salesRep'].valueChanges
.subscribe((selectedOptions) => {
// changes
});
this.sub = this.route.params.subscribe(
params => {
let id = +params['id'];
if (id === 0)
this.pageTitle = 'Add Q';
else
this.pageTitle = 'Edit Q';
}
);
}
add() {
console.log(this.newQForm);
console.log('Saved: ' + JSON.stringify(this.newQForm));
}
addAgency() {
console.log(this.newQForm);
console.log('Saved: ' + JSON.stringify(this.newQForm));
}
backBtnClick() {
this.router.navigate(['/newq']);
}
}
*重複するコントロール*とはどういう意味ですか?正確に何が問題なのですか、それは不明ですか?現在の行動とは何か、期待される行動は何か? – Alex
私はコーディネーターのテキストボックスフィールドを動的に複製しようとしていました(あなたがJSFiddleで見ることができれば)、それはうまく動作しません。 – user1704842
配列にコーディネーターを追加することを意味すると思いますか?私はそれがそうだったと確信しています:)私はあなたのコードを見てみましょう、私たちがこれを理解できるかどうかを見てみましょう。 – Alex