【问题标题】:Angular2 ngModel change binding on Input type="number"Angular2 ngModel 更改输入类型 =“数字”上的绑定
【发布时间】:2016-10-13 21:50:54
【问题描述】:

我有一个数字类型的输入,当我尝试使用 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
        }
    }
}

我是 Angular2 的新手,所以我在这里缺少什么?

PS。我已经看到了与采用布尔值的输入类似的问题

【问题讨论】:

  • 日志是什么?
  • 我不确定你的意思?
  • 我也无法让它工作。我所做的是将输入更改为type="tel"
  • 究竟是哪个错误?浏览器的控制台启动有什么错误吗?
  • 完全没有错误,更改事件触发得很好,设置值也可以正常工作。 UI 只是不反映从更改功能设置的值

标签: javascript angular input typescript ngmodel


【解决方案1】:

更改为单向绑定对我有用,如果用户也取消,不触发更改会更干净(请注意,我仍然必须手动更新 DOM,如您所见):

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

【讨论】:

    【解决方案2】:

    没试过,但可能有用

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

    【讨论】:

    • 那行得通。这是针对 angular2.0.0 中的错误的解决方法,还是有原因更改绑定适用于 type="text" 而不适用于 type="number"?
    • 我不认为这是一个错误。也许这是一个时间问题。没有为您的((ngModel)(change))中的多个事件绑定指定执行顺序。您也可以尝试使用 (ngModelChange)="..." 而不是 (change)="..." 时效果是否不同。
    • 我试过ngModelChange,事件在按键与模糊时触发。在数字字段的情况下,退格 0 或突出显示并覆盖会在您有机会输入值之前触发它。仍然没有意义为什么 type="text" 具有相同的确切代码工作。
    • 我承认这听起来很奇怪。你用的是什么浏览器?
    • Chrome 版本 53.0.2785.143(64 位)OSX
    猜你喜欢
    • 2017-01-13
    • 2016-11-07
    • 2018-06-27
    • 2020-04-18
    • 2018-09-12
    • 2017-03-23
    • 2019-10-08
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多