0

誰かがこれを解決する方法を知っているかどうか簡単な質問ですが、チェックボックスの入力に問題があります。

次のように構成されています

<input type="checkbox" [(ngModel)]="settings.ht_enabled" (ngModelChange)="changeSetting('ht_enabled')" id="setting-ht_enabled"> <label for="setting-ht_enabled">ht enabled</label>

チェックボックスをクリックするたびに、モデルの値が未定義になり、(ngModelChange)のみを実行する がトリガーされconsole.logます。設定が適切に設定され、チェックボックスがオンになっていることがわかります。実際にクリックしたときにのみ、モデルの値が未定義になります。

もう 1 つの注意点は、この Angular2 プロジェクトが Web ワーカーとして実行されていることです。

誰かが同様の問題を抱えていて、これを解決する方法を知っていますか?

この HTML の背後にあるコンポーネントは

@Component({
  selector: 'app-setting-form',
  templateUrl: './setting-form.component.html',
  styleUrls: ['./setting-form.component.css'],
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class SettingFormComponent {
  settings: Setting;

  constructor(
    private service: SettingService,
    private cdr: ChangeDetectorRef,
    private messageBrokerService: MessageBrokerService,
  ) {
    this.messageBrokerService.send('access_token', '', this.initialize.bind(this));
  }

  initialize(token) {
    this.service.getSettings(token).subscribe(settings => this.handleSettings(settings));
  }

  handleSettings(settings: any) {
    this.settings = new Setting(settings);
    this.cdr.markForCheck();
  }

  changeSetting(setting: string) {
    console.log(this.settings);
  }
}
4

1 に答える 1

0

チェックボックスの値が Angular2 で ngModel を適切に設定していないように見えるため、簡単な回避策を作成しました。これが Web ワーカー内で実行されているプロジェクトと関係があるかどうかはわかりませんが、次のように動作しました。

<input type="checkbox" [(ngModel)]="settings.ht_enabled" (click)="changeSetting('ht_enabled')" id="setting-ht_enabled"> <label for="setting-ht_enabled">ht enabled</label>

changeSettings 関数は

changeSetting(setting: string) {
  this.settings[setting] = !this.settings[setting];
  console.log(this.settings);
}

(ngModelChange) を削除し、独自のクリック イベントを追加しました

于 2016-12-13T15:02:28.497 に答える