Javascript 输入类型上的Angular2 ngModel更改绑定=";“数字”;

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

我有一个数字类型的输入,当我试图用onChange事件更改值时,它不起作用

我也尝试过同样的文本输入,效果非常好

<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
        }
    }
}