【问题标题】:Calculation of the input values计算输入值
【发布时间】:2021-05-09 15:22:15
【问题描述】:

我正在开发一个 Angular 应用程序,其中我有一个 matInput 字段,如下面的代码所示

https://stackblitz.com/edit/ngx-slider-simple-slider-example-dbyxqm?file=src%2Fapp%2Fapp.component.html

用户可以输入正值或负值。假设我的当前值为 100,用户输入 +5 或 5(用户可以使用 + 符号或可以给出正数)我希望我的最终输出为 100,如果用户输入 -5,那么我希望我的最终输出应该是 95,我想要立即在屏幕上显示输出。我的代码面临的问题是:

  1. 输入被追加到 100 它没有做任何加法或减法
  2. 我没有立即得到输出。如果我单击输入字段外的某个位置,我就能够显示输出。

如何解决以上两个问题?

HTML

<input matInput (change)="valueUpdated($event)">
my final value is {{myFinalValue}}

打字稿

import { Component } from '@angular/core';
import { Options } from 'ng5-slider';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {
  public myFinalValue: number;

  valueUpdated(event) {
    this.myFinalValue = 100 + event.target.value;
  }
}

【问题讨论】:

  • 请检查How to Ask 并确保您在问题中将minimal reproducible example 作为代码块。 Stackblitz 很棒,但还不够,当链接失效时,问题变得毫无用处......
  • 如果您想在文本框中按下某个键时立即获得更改,则应将事件属性change 更改为keypress
  • 它不适用于按键。您能否更新将您的代码添加到我的 stackblitz 或作为答案?

标签: html angular typescript angular9 angular10


【解决方案1】:

输入元素以字符串而不是数字的形式返回值。

您需要将event.target.value 转换为数字,然后才能将两者相加。 您可以使用简写+event.target.value,它将值转换为数字(相当于parseInt(&lt;var&gt;)

valueUpdated(event) {
  this.myFinalValue = 100 + +event.target.value;
}

如果您希望 UI 在每次输入更改时更新,您需要使用 (input) 事件而不是 (change) 事件:

<input matInput (input)="valueUpdated($event)">
my final value is {{myFinalValue}}

Here's my fork 你的 stackblitz 的变化。

【讨论】:

  • 它正在计算,但我在输入框外单击后可以打印结果值。为什么会这样?如果我做错了什么,请你看看我的 stackblitz 吗?
  • @Jamie 更改了我的答案,使其也立即更新。
  • @Jamie 基本上,(change) 仅在失去焦点或在输入内聚焦时按下 enter 时触发输入。这就是为什么即使您更改了值,UI 中的值也不会更新。使用(input),每次用户输入内容时都会触发该事件。 keyupinput 应该非常相似。不确定到底有什么区别。
猜你喜欢
  • 2021-11-21
  • 2013-04-19
  • 2021-03-27
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 2021-01-31
  • 2014-04-27
  • 2014-02-22
相关资源
最近更新 更多