Angular2 - md-slide-toggle显示错误的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angular2 - md-slide-toggle显示错误的值相关的知识,希望对你有一定的参考价值。
我的问题是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>
//.同时
device:number = 1;
onClick()
let tmp;
if (this.device == 1)
tmp=0;
if (this.device == 0)
tmp=1;
this.device=tmp;
你是对的,之前没有使用过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团队至少知道问题“Slide toggle - (change) event will be fired even when the slider has not change.”中提到的这个问题的一个版本
您必须从事件中找到对象属性选中的值。为我工作的代码
模板
<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);
我用setTimeout
解决了这个问题;在您的html文件中,向#contract
添加一个id
<mat-slide-toggle color="primary" formControlName="contract" #contract>
Contract
</mat-slide-toggle>
在你的.ts
文件中使用
@ViewChild('contract') contract: MatSlideToggle;
在构造函数之前;
和ngOnInit()
内部添加简单:
setTimeout(() =>
this.contract.toggle();
);
这个对我有用
以上是关于Angular2 - md-slide-toggle显示错误的值的主要内容,如果未能解决你的问题,请参考以下文章
404 使用 Angular2、angular2-websocket 和类型
Angular2 [innerHtml] angular2 标签不起作用
Angular2 Dart - 在 Angular2 组件中获取文本
RangeError,谷歌地图方向服务。 angular2, SebastianM/angular2-google-maps