angular - 从 Observable 的对象内部获取变量值
问题描述
我正在尝试将一个变量分配给一个值,该值保存在我的打字稿文件中 Observable 的对象内。我能够将变量作为我的 HTML 文件中的值返回,所以我知道我可能遗漏了一些非常明显的东西,我认为解决方案是使用双向绑定,但我只是无法让它工作. 任何帮助将不胜感激。我的代码如下:
import { Component, OnInit } from '@angular/core';
import { AppState } from '../store';
import { State, Store } from '@ngrx/store';
import { NgForm } from '@angular/forms';
import * as fromCurrencies from '../store/actions/currencies.actions';
import { Currency } from '../Models/currency';
import { Observable } from 'rxjs';
import * as fromSelectors from '../store/selectors/currencies.selectors';
import { selectCurrency } from '../store/selectors/currencies.selectors';
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css'],
})
export class HomeComponent implements OnInit {
constructor(private store: Store<AppState>) {}
public currency$: Observable<Currency>;
public conversionRate: number;
public convertedAmount: number;
ngOnInit(): void {}
OnSubmit(form: NgForm) {
console.log('currency: ' + form.value.symbol);
this.store.dispatch(
fromCurrencies.findCurrency({
symbol: form.value.symbol,
})
);
this.currency$ = this.store.select(fromSelectors.selectCurrency);
this.convertedAmount = form.value.amount * this.conversionRate;
}
}
界面:
id: number;
symbol: string;
name: string;
conversionRate: number;
}
我想将 Currency 中的 conversionRate 值分配给打字稿文件中的变量 conversionRate 。我还将添加 realted HTML,我知道如何获取值。
<div>
<form #form="ngForm" (ngSubmit)="OnSubmit(form)">
<div class="currency-type">
<label for="symbol">Symbol</label>
<input
type="text"
name="symbol"
ngModel
required
id="symbol"
class="form-control"
placeholder="enter symbol"
/>
</div>
<div>
<label for="amount">Amount (€): </label>
<input
type="number"
name="amount"
ngModel
required
id="amount"
class="form-control"
placeholder="enter amount"
/>
</div>
<button
type="submit"
[disabled]="form.invalid"
class="btn btn-primary btn-lg btn-block"
>
<span>Calculate Currency</span>
</button>
</form>
</div>
<table *ngIf="currency$ | async as currencyInfo">
<thead>
<tr>
<th>Symbol</th>
<th>Name</th>
<th>Conversion Rate</th>
<th>Amount (Euro)</th>
</tr>
</thead>
<tr *ngFor="let curr of currencyInfo">
<td>{{ curr.symbol }}</td>
<td>{{ curr.name }}</td>
<td>{{ curr.conversionRate }}</td> //value I want to assign in ts file
<td>{{ conversionRate }}</td>
</tr>
</table>
编辑:我已经通过在表格中使用for循环成功解决了这个问题,然后我可以定义一个等于该值的选择标记。新的 HTML 代码如下所示:
<div *ngIf="currency$ | async as currencyInfo">
<form #form="ngForm" (ngSubmit)="OnSubmit(form)">
<div class="currency-type">
<label for="symbol">Symbol</label>
<input
type="text"
name="symbol"
ngModel
required
id="symbol"
class="form-control"
placeholder="enter symbol"
/>
</div>
<div>
<label for="amount">Amount (€): </label>
<input
type="number"
name="amount"
ngModel
required
id="amount"
class="form-control"
placeholder="enter amount"
/>
</div>
<div>
<label>Conversion Rate:</label>
<select
*ngFor="let curr of currencyInfo"
name="rate"
type="number"
id="rate"
ngModel
class="form-control"
value="{{ curr.conversionRate }}"
id="rate"
>
<option>
{{ curr.conversionRate }}
</option>
</select>
</div>
<button
type="submit"
[disabled]="form.invalid"
class="btn btn-primary btn-lg btn-block"
>
<span>Calculate Currency</span>
</button>
</form>
</div>
<table *ngIf="currency$ | async as currencyInfo">
<thead>
<tr>
<th>Converted Amount</th>
</tr>
</thead>
<tr *ngFor="let data of currencyInfo">
<td>{{ convertedAmount }}</td>
</tr>
</table>
解决方案
如果你想更新你的curr.conversionRate
,那么你可以使用input
和绑定使用[(ngModel)]
如下=>
HTML:
<tr *ngFor="let data of currencyInfo">
<td>{{data.name}}</td>
<td>
<tr>
<input type="number" (ngModelChange)="dataChanged(data,$event)" [(ngModel)]="data.conversionRate">
</tr>
</td>
<td>{{data.conversionRate }}</td>
</tr>
TS:
dataChanged(data,$event){
//console.log(data);
//console.log($event);
}
注意:这是一个演示链接,您可以查看 => Stackblitz Link。
推荐阅读
- google-cloud-platform - BigQuery 数据集维护
- python - Pandas:使用 dtypes 但混合类型列读取 csv(NA 值)
- php - 如何获得与输入的数字一样多的结果?
- python - 从使用 pivot_table() 创建的 df 中删除索引名称
- laravel - 如何在 Docker 中使用 Laravel 队列监听
- symfony - Symfony - 带有 entity.propety 过滤器的下拉列表
- python - Python。姜戈。如何在记录传入有效负载期间避免记录文件的正文。多部分/表单数据
- javascript - 将键盘快捷键重新映射到另一个键?
- javascript - 是否可以更改`中的值和数据
- go - 在 Go 中测试通过 json http 响应返回的错误