2016-12-13 113 views
0

只是一個簡單的問題,如果有人知道如何解決這個問題,但我有一些複選框輸入問題。Angular2 ngModel複選框未定義

它通過以下方式

<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。 設置得到正確設置,我看到選中的複選框。只有當我實際點擊它時,我的模型的值纔會變得不明確。

另一個需要注意的是,這個Angular2項目是作爲一個web worker運行的。

有沒有人有類似的問題,並知道如何解決這個問題?

這塊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); 
    } 
} 
+0

你可以發佈一個有點您的JavaScript的? –

+0

你有一個對象「設置」在你的JavaScript? –

+0

你試過初始化'settings'嗎?看來它沒有任何價值。 –

回答

0

我做了一個快速的解決方法,因爲它似乎是一個複選框的值不正確Angular2設置ngModel。我不知道這是否與在網絡工作者中運行的項目有關,但我的工作如下。

<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),並加入我自己的點擊事件