私はAngular 2アプリケーションのチェックボックスにブートストラップスイッチを使用しています。スイッチをクリックすると、私のクラスの私のLightNeeded
変数の値を変更する必要があります。角2:変数の値を変更しないブートストラップスイッチ
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の場合、それは成功し、コンソールにログインする本当の私は、次のコードを持っています。 falseの場合、コンソールにfalseを正常に記録します。しかし、それは私のLightNeeded
変数の値を決して変更しません。
私はthis.LightNeeded
のthis
の上に置くと、私は次の警告を得る:
が疑わしい「この」使用方法:現在のコンテキスト内に「これは」ローカル 機能に、いない含まれているクラスを指します。
どのように私は私が意図していますように動作し、私のLightNeeded
変数の値を変更するthis
を得ることができますか?私は他のアプローチをとることにもオープンしています。入力に[attr.checked]="LightNeeded? true : null"
を追加しようとしましたが、機能しませんでした。
EDIT:
、それは簡単なチェックボックスだったとき[(ngModel)]="LightNeeded"
を追加することから、結合双方向で働いたが、何らかの理由でブートストラップスイッチプラグインは、双方向の結合が壊れます。 JQuery InputmaskやJQuery UI Datepickerなどの他のプラグインも、双方向バインディングを破ります。
値は要素の双方向バインディングによって変更されます –
これは可能ですが、そうではありません。シンプルなチェックボックスのときに機能しましたが、ブートストラップスイッチを実装するとすぐに双方向バインディングが壊れました。 – Brett
[TypeScriptとこのコンテキスト検出]の可能な複製(http://stackoverflow.com/questions/33791128/typescript-and-this-context-detection) – Fiddles