私は、フォームを動的に生成するチェックボックスと、サーバーからフォームデータを取得する初期取得要求(このチェックボックスはチェックされ、チェックされません。 trueまたはfalseの場合は0または1) チェックボックスをオンにすると、現在の値(0〜1、1〜0)の反対の正しいput要求を送信するだけでなく、チェックを入れたりオフにしたりすることになります。 今のところチェックされていないすべてのチェックボックスは期待どおりに機能しますが、最初からチェックされたボックスは一度だけクリックされ、チェックされずに0を送信すると1になります。 0の出力がある場合、そのチェックボックスは正しく機能します。チェックボックスの最初のクリックだけをねじ込んでいますか?角度反応型チェックボックスは、最初のクリックの後でのみ正しく切り替わります
カンプ
places;
ready = false;
countriesForm: FormGroup;
constructor(private whiteListService: WhiteListService) {}
ngOnInit() {
// get places list with status'
this.whiteListService.getList()
.subscribe(
(response: Response) => {
console.log(response.statusText);
this.places = response.json();
this.createList(this.places.countries);
},
(error) => console.log(error)
);
}
createList(places) {
// assign this.places for dom binding access
this.places = places;
console.log(places)
this.countriesForm = new FormGroup({});
for (let i = 0; i < this.places.length; i++) {
this.countriesForm.addControl(
this.places[i].name, new FormControl()
);
}
this.ready = true;
}
toggleAllowed(place, event) {
// send authorization of country to server
console.log('allow before switch', place.allow);
place.allow === 1 ? place.allow = 0 : place.allow = 1;
console.log('allow after switch', place.allow);
console.log(this.places);
this.whiteListService.sendAllow(place.code, place.allow)
.subscribe(
(response) => console.log(response),
(error) => {
console.log(error);
place.allow = !place.allow;
}
);
}
}
HTML
<div class="geo-list">
<div class="content-box container">
<form *ngIf="ready" [formGroup]="countriesForm">
<div class="place" *ngFor="let place of places">
<input
type="checkbox"
formControlName="{{place.name}}"
value="{{place.allow}}"
(change)="toggleAllowed(place, $event)"
[checked]="place.allow == 1"
>
{{ place.name }} | {{ place.code }} | {{ place.continent }} | {{ place.allow }}
</div>
</form>
</div>
</div>
ありがとう@AJT_82、私は提案された変更を実装しましたが、それぞれのチェックボックスは常に、すでにチェックされているボックスさえも1の値として最初のクリックを送信します。これは私を混乱させる。副メモとして、私はts lintからの二重等号についての警告を得るが、明らかに三つの等しいものは仕事をしない。どうしてこれなの?どうすればFormControlValueをthis.places [i] .allowに設定するのがうまくいかないのでしょうか? – FussinHussin
***とは何を意味するのかは分かりませんが、各チェックボックスは常に最初のクリックを1の値として送信します。***?私は再現できません:http://plnkr.co/edit/8S4wrBu0JBG5M4MlpcuP?p=previewそして '==='チェック**タイプ**と値、 '=='は値だけをチェックします。 – Alex
私が言っているのは、getメソッドがリストの現在の状態を返すときに、値を0に設定し、メソッドを追加するときに、get要求がチェックボックスに1を返しても、それをオフにして、0の代わりに1を送信します。しかし、私は下に述べたように私の問題を理解しました。 – FussinHussin