我的问题是 md-slide-toggle 具有正确的值,但显示错误。
例如:
在开始时,该值为1,并且切换处于活动状态。
按下切换的时间:值为0,但切换仍处于活动状态。
按下切换的时间:值为1但现在切换现在处于非活动状态。
...
请在此处查看:https://plnkr.co/edit/kxehpwaat5dezNActZbn?p=preview
//。HTML
<md-card>
<md-slide-toggle ngDefaultControl (click)="onClick()"
[ngModel]="(device)"></md-slide-toggle>
{{device}}
</md-card>
//。TS
device:number = 1;
onClick() {
let tmp;
if (this.device == 1){
tmp=0;
}
if (this.device == 0){
tmp=1;
}
this.device=tmp;
}
}
答案 0 :(得分:11)
你是对的,以前没有使用过Slide Toggle Component,默认情况下看起来似乎是一种奇怪的行为,虽然这似乎有效:
取自您的Plunker:
<强>模板强>
<md-card>
<md-slide-toggle
ngDefaultControl
(change)="onChange($event)"
[checked]="device"></md-slide-toggle>
{{device}}
</md-card>
<强> TS 强>
import {Component} from '@angular/core';
@Component({
selector: 'slide-toggle-overview-example',
templateUrl: './slide-toggle-overview-example.html',
})
export class SlideToggleOverviewExample {
device:number = 1;
onChange(e: Event) {
if (e.checked == true) {
this.device = 1;
} else {
this.device = 0;
}
}
}
起初,我认为您同时使用ngModel
绑定和 click
绑定,但情况并非如此(因为我最终注意到你正在使用单向)。当您尝试分配数值而不是boolean
时,它们似乎从一开始就不同步。
因为 也按预期工作:
<强>模板强>
<md-card>
<md-slide-toggle ngDefaultControl
[(ngModel)]="device"></md-slide-toggle>
{{device}}
</md-card>
<强> TS 强>
import {Component} from '@angular/core';
@Component({
selector: 'slide-toggle-overview-example',
templateUrl: './slide-toggle-overview-example.html',
})
export class SlideToggleOverviewExample {
device:boolean = true;
}
虽然看起来ng团队至少知道问题中提到的此问题的一个版本&#34; Slide toggle - (change) event will be fired even when the slider has not change.&#34;
答案 1 :(得分:4)
您必须从event中找到对象属性选中的值。为我工作的代码
模板
<md-card>
<md-slide-toggle
[(ngModel)]="device"
(change)="onChange($event)"></md-slide-toggle>
{{device}}
</md-card>
TS
import {Component} from '@angular/core';
@Component({
selector: 'slide-toggle-overview-example',
templateUrl: './slide-toggle-overview-example.html',
})
export class SlideToggleOverviewExample {
device:number = 1;
onChange(value) {
if (value.checked == true) {
this.device = 1;
console.log(1);
} else {
this.device = 0;
console.log(0);
}
}
}
答案 2 :(得分:0)
我用setTimeout
解决了这个问题;
在您的html文件中,向#contract
<mat-slide-toggle color="primary" formControlName="contract" #contract>
Contract
</mat-slide-toggle>
在您的.ts
文件中使用
@ViewChild('contract') contract: MatSlideToggle;
构造函数之前;
和ngOnInit()
内部
添加简单:
setTimeout(() => {
this.contract.toggle();
});
对我有用
答案 3 :(得分:0)
在您的HTML
<mat-slide-toggle [checked]="flags" (change)="flagsChange();" color="primary">
{{flags ? 'YES' : 'NO'}}</mat-slide-toggle>
在TS
reimbursableChange() {
if (!this.flags.reimbursable) {
this.flags.reimbursable = true;
} else {
this.flags.reimbursable = false;
}
}