Angular 2 アプリケーションのチェックボックスにブートストラップ スイッチを使用しています。スイッチをクリックするとLightNeeded
、クラス内の変数の値がそれに合わせて変化するようにします。次のコードがあります。
HTML:
<input class="bootstrap-switch light-needed" name="LightNeeded" type="checkbox" [(ngModel)]="LightNeeded">
TypeScript ファイル:
LightNeeded: boolean;
ngOnInit(): void {
// Invoke bootstrap switches
$('.bootstrap-switch').bootstrapSwitch({
onText: "Yes",
offText: "No"
});
this.changeBootstrapSwitchValues();
}
changeBootstrapSwitchValues() {
$('.light-needed').on('switchChange.bootstrapSwitch', function (event:any, state:any) {
if (state) {
console.log('true');
this.LightNeeded= true;
} else {
console.log('false');
this.LightNeeded= false;
};
});
}
スイッチが true の場合、true がコンソールに正常に記録されます。false の場合、false がコンソールに正常に記録されます。ただし、LightNeeded
変数の値が変更されることはありません。
にカーソルを合わせるthis
とthis.LightNeeded
、次の警告が表示されます。
疑わしい 'this' の使用法: 現在のコンテキストでは、'this' は含まれているクラスではなく、ローカル関数を参照しています。
this
意図したとおりに作業を開始し、LightNeeded
変数の値を変更するにはどうすればよいですか? 私は、理にかなっている他のアプローチを取ることにもオープンです。入力に追加しようとし[attr.checked]="LightNeeded? true : null"
ましたが、うまくいきませんでした。
編集:
単純なチェックボックスの場合は、追加による双方向バインディングが[(ngModel)]="LightNeeded"
機能していましたが、何らかの理由で、ブートストラップ スイッチ プラグインがその双方向バインディングを壊してしまいました。JQuery Inputmask や JQuery UI Datepicker などの他のプラグインも双方向バインディングを壊します。