如何计算并绑定到 Angular 中的多个输入字段
How to calculate and bind to multiple input fields in Angular
我正在尝试将多个输入字段绑定在一起,但在这样做时遇到了问题。我基本上有多个输入字段,如果一个输入字段发生变化,那么其他输入字段也应该计算并反映值。它是一个长度单位转换器。这是我正在尝试的示例,可以在 w3schools 上找到:https://www.w3schools.com/howto/howto_js_length_converter.asp
这是我的代码:
HTML
公里
<mat-form-field class="form-field" appearance="outline">
<mat-label> Meter </mat-label>
<input matInput [(ngModel)]="meters" (change)="calculate()" type="number" />
</mat-form-field>
<mat-form-field class="form-field" appearance="outline">
<mat-label> Centimeter </mat-label>
<input matInput [(ngModel)]="centimeters" (change)="calculate()" type="number" />
</mat-form-field>
<mat-form-field class="form-field" appearance="outline">
<mat-label> Yard </mat-label>
<input matInput [(ngModel)]="yards" (change)="calculate()" type="number" />
</mat-form-field>
<mat-form-field class="form-field" appearance="outline">
<mat-label> Miles </mat-label>
<input matInput [(ngModel)]="miles" (change)="calculate()" type="number" />
</mat-form-field>
<mat-form-field class="form-field" appearance="outline">
<mat-label> Inches </mat-label>
<input matInput [(ngModel)]="inches" (change)="calculate()" type="number" />
</mat-form-field>
TS
public kilometers = 0;
public meters = 0;
public centimeters = 0;
public yards = 0;
public inches = 0;
public miles = 0;
calculate() {
this.kilometers = this.kilometers;
this.kilometers = this.meters * 1000;
this.kilometers = this.centimeters * 100000;
this.kilometers = this.yards * 1094;
this.kilometers = this.inches * 39370;
this.kilometers = this.miles / 1,609;
}
注意:我无法使用任何库进行计算,因此我为每个计算创建了单独的方法,例如。公里到米等(现在刚刚完成公里转换,直到我可以让逻辑工作)。
我为她创建了一个 stackblitz 示例:https://stackblitz.com/edit/angular-9-material-starter-f1drwx?file=src/app/app.component.html
当用户输入一个值时,您需要调整所有其他值以匹配。您需要知道用户更改了哪一个,否则您将不知道用于确定所有其他值的值。
因此,对于每个字段,您添加一个处理程序 - 请注意,我使用的是 (input)
事件而不是 change
,因为 input
将在您键入时更新。
centimeterChanged(){
this.kilometers = this.centimeters * 100000;
this.meters = this.centimeters * 1000;
// set all others EXCEPT this.centimeters
}
模板:
<mat-form-field class="form-field" appearance="outline">
<mat-label> Centimeter </mat-label>
<input
matInput
[(ngModel)]="centimeters"
(input)="centimeterChanged()"
type="number"
/>
</mat-form-field>
已更新 stackblitz:https://stackblitz.com/edit/angular-9-material-starter-kbp3ni?file=src%2Fapp%2Fapp.component.ts
您可以为每个输入字段更改使用不同的方法。
让我们以您的公里计算为例。
方法应该是
calculateFromKilometer() {
this.meters = this.kilometers * 1000;
this.centimeters = this.kilometers * 100000;
// do other conversion from kilometers
}
您应该从公里文本框的(更改)事件中调用它
您可以对仪表文本框和方法执行相同的操作,如下所示
calculateFromMeter() {
this.kilometers = this.meters * 0.001;
this.centimeters = this.meters * 100;
// do other conversion from meters
}
我正在尝试将多个输入字段绑定在一起,但在这样做时遇到了问题。我基本上有多个输入字段,如果一个输入字段发生变化,那么其他输入字段也应该计算并反映值。它是一个长度单位转换器。这是我正在尝试的示例,可以在 w3schools 上找到:https://www.w3schools.com/howto/howto_js_length_converter.asp
这是我的代码:
HTML
公里<mat-form-field class="form-field" appearance="outline">
<mat-label> Meter </mat-label>
<input matInput [(ngModel)]="meters" (change)="calculate()" type="number" />
</mat-form-field>
<mat-form-field class="form-field" appearance="outline">
<mat-label> Centimeter </mat-label>
<input matInput [(ngModel)]="centimeters" (change)="calculate()" type="number" />
</mat-form-field>
<mat-form-field class="form-field" appearance="outline">
<mat-label> Yard </mat-label>
<input matInput [(ngModel)]="yards" (change)="calculate()" type="number" />
</mat-form-field>
<mat-form-field class="form-field" appearance="outline">
<mat-label> Miles </mat-label>
<input matInput [(ngModel)]="miles" (change)="calculate()" type="number" />
</mat-form-field>
<mat-form-field class="form-field" appearance="outline">
<mat-label> Inches </mat-label>
<input matInput [(ngModel)]="inches" (change)="calculate()" type="number" />
</mat-form-field>
TS
public kilometers = 0;
public meters = 0;
public centimeters = 0;
public yards = 0;
public inches = 0;
public miles = 0;
calculate() {
this.kilometers = this.kilometers;
this.kilometers = this.meters * 1000;
this.kilometers = this.centimeters * 100000;
this.kilometers = this.yards * 1094;
this.kilometers = this.inches * 39370;
this.kilometers = this.miles / 1,609;
}
注意:我无法使用任何库进行计算,因此我为每个计算创建了单独的方法,例如。公里到米等(现在刚刚完成公里转换,直到我可以让逻辑工作)。
我为她创建了一个 stackblitz 示例:https://stackblitz.com/edit/angular-9-material-starter-f1drwx?file=src/app/app.component.html
当用户输入一个值时,您需要调整所有其他值以匹配。您需要知道用户更改了哪一个,否则您将不知道用于确定所有其他值的值。
因此,对于每个字段,您添加一个处理程序 - 请注意,我使用的是 (input)
事件而不是 change
,因为 input
将在您键入时更新。
centimeterChanged(){
this.kilometers = this.centimeters * 100000;
this.meters = this.centimeters * 1000;
// set all others EXCEPT this.centimeters
}
模板:
<mat-form-field class="form-field" appearance="outline">
<mat-label> Centimeter </mat-label>
<input
matInput
[(ngModel)]="centimeters"
(input)="centimeterChanged()"
type="number"
/>
</mat-form-field>
已更新 stackblitz:https://stackblitz.com/edit/angular-9-material-starter-kbp3ni?file=src%2Fapp%2Fapp.component.ts
您可以为每个输入字段更改使用不同的方法。 让我们以您的公里计算为例。 方法应该是
calculateFromKilometer() {
this.meters = this.kilometers * 1000;
this.centimeters = this.kilometers * 100000;
// do other conversion from kilometers
}
您应该从公里文本框的(更改)事件中调用它
您可以对仪表文本框和方法执行相同的操作,如下所示
calculateFromMeter() {
this.kilometers = this.meters * 0.001;
this.centimeters = this.meters * 100;
// do other conversion from meters
}