Javascript 输入类型上的Angular2 ngModel更改绑定=";“数字”;
我有一个数字类型的输入,当我试图用onChange事件更改值时,它不起作用 我也尝试过同样的文本输入,效果非常好Javascript 输入类型上的Angular2 ngModel更改绑定=";“数字”;,javascript,angular,input,typescript,ngmodel,Javascript,Angular,Input,Typescript,Ngmodel,我有一个数字类型的输入,当我试图用onChange事件更改值时,它不起作用 我也尝试过同样的文本输入,效果非常好 <input type="number" [(ngModel)]="element.value" (change)="onChange($event)" > export class NumFieldComponent { @Input() index; @Input() element; //element.value = 0
<input
type="number"
[(ngModel)]="element.value"
(change)="onChange($event)"
>
export class NumFieldComponent {
@Input() index;
@Input() element; //element.value = 0
onChange($event){
var confirm = confirm("Are you sure about this?")
if(confirm){
//True, accept the value
} else {
this.element.value = 0;
//Failed, set the input back to 0
}
}
}
导出类NumFieldComponent{
@输入()索引;
@Input()元素;//element.value=0
onChange($事件){
var confirm=confirm(“你确定吗?”)
如果(确认){
//如果为True,则接受该值
}否则{
this.element.value=0;
//失败,请将输入设置回0
}
}
}
我是安格拉尔的新手,所以我在这里错过了什么
另外,我也看到了一个类似的问题,即接受布尔值的输入没有尝试过,但可能会起作用
export class NumFieldComponent {
@Input() index;
@Input() element; //element.value = 0
constructor(cdRef:ChangeDetectorRef) {}
onChange($event){
var confirm = confirm("Are you sure about this?")
if(confirm){
//True, accept the value
} else {
this.element.value = 0;
this.cdRef.detectChanges(); // <<<=== added
//Failed, set the input back to 0
}
}
}
导出类NumFieldComponent{
@输入()索引;
@Input()元素;//element.value=0
构造函数(cdRef:ChangeDetectorRef){}
onChange($事件){
var confirm=confirm(“你确定吗?”)
如果(确认){
//如果为True,则接受该值
}否则{
this.element.value=0;
这个.cdRef.detectChanges();//更改为单向绑定对我来说很有效,如果用户也取消了,则不触发更改会更干净(注意,如您所见,我仍然必须手动更新DOM):
导出类NumFieldComponent{
@输入()索引;
@Input()元素;//element.value=0
onChange($事件){
var confirm=confirm(“你确定吗?”)
如果(确认){
this.element.value=$event.target.value
}否则{
$event.target.value=0;
//失败,请将输入设置回0
}
}
}
日志是什么?我不确定你的意思?我也无法让它工作。我所做的是将输入更改为type=“tel”
到底是哪一个错误?浏览器的控制台会启动任何错误?根本没有错误,更改事件会触发,设置值也会正常工作。UI不会反映更改功能设置的值。这是angular2.0.0中错误的解决方法,还是更改绑定使用type=“text”的原因我不认为这是一个bug。也许这是一个时间问题。没有为多个事件绑定指定执行顺序,比如((ngModel)
和(change)
)。如果使用(ngModelChange)=“…”而不是(change)=“…”
,您也可以尝试使用不同的方式
。我尝试了ngModelChange
,事件在按键vs模糊时触发。对于数字字段,在您有机会输入值之前,退格0或突出显示并覆盖会触发它。仍然没有意义为什么type=“text”我承认这听起来很奇怪。你用的是什么浏览器?Chrome版本53.0.2785.143(64位)OSX
<input
type="number"
[ngModel]="element.value" // one way binding
(change)="onChange($event)"
>
export class NumFieldComponent {
@Input() index;
@Input() element; //element.value = 0
onChange($event){
var confirm = confirm("Are you sure about this?")
if(confirm){
this.element.value = $event.target.value
} else {
$event.target.value = 0;
//Failed, set the input back to 0
}
}
}