我试图在Angular 4中创建一个货币兑换应用程序,但是当我更改其中一个属性值时,我遇到了问题。让我解释一下自己:
我有一项服务,从API服务获得智利比索(CLP)的比特币价格,然后将价格存储在接口中。我想要做的是当用户键入一定数量的CLP时,应用会自动将其转换为BTC。 当我创建算法时,我使用带有随机数的属性来测试它。
Component.ts:
exchangeRate : 715000;
targetAmount = 1;
baseAmount = this.exchangeRate;
update(baseAmount) {
this.targetAmount = parseFloat(baseAmount) / this.exchangeRate;
}
这是DOM:
<div class="form-group">
<label for="company">Monto en CLP</label>
<input type="number" class="form-control" id="company" placeholder="Ingrese el monto en CLP" (input)="update($event.target.value)">
</div>
这工作正常但后来我添加了一些代码行来从API服务获取exchangeRate。这是代码:
Component.ts
minask(price: SurbtcMarketView): number {
return price.min_ask;
}
Interface.ts
export class SurbtcMarket {
public ticker: SurbtcMarketView;
}
export class SurbtcMarketView {
public last_price : number;
public min_ask : number;
public max_bid : number;
public volume : number;
public price_variation_24h : number;
public price_variation_7d : number;
}
现在我想在exchangeRate中使用minask而不是715000:
exchangeRate : this.minask;
targetAmount = 1;
baseAmount = this.exchangeRate;
update(baseAmount) {
this.targetAmount = parseFloat(baseAmount) / this.exchangeRate;
}
in / this.exchangeRate;我收到这个错误:
算术运算的右侧必须是'any'类型, 'number'或枚举类型
我该如何避免这种情况?谢谢你的帮助!
编辑:
这是我在this.exchangeRate中使用数据的服务:
service.ts
import { Injectable } from '@angular/core';
import { Http, Headers, Response } from '@angular/http';
import 'rxjs/add/operator/toPromise';
import {Observable} from "rxjs";
import 'rxjs/Rx';
import 'rxjs/add/operator/catch';
import { SurbtcMarket } from './surbtcmarket'
@Injectable()
export class SurbtcService {
constructor(private http: Http) { }
public getPricess() :Observable<SurbtcMarket> {
return this.http.get('https://www.surbtc.com/api/v2/markets/btc-clp/ticker')
.map((response: Response) => response.json());
}
}
答案 0 :(得分:1)
this.minask
引用方法,而不是原子值(例如数字)。这就是你收到错误的原因。将其转换为
this.minask($YOUR_ARGUMENT)
组件代码中的演示用法:
demoStockViewInstance = {
last_price : 10;
min_ask : 5;
max_bid : 10;
volume : 10;
price_variation_24h : 10;
price_variation_7d : 10;
}
// exchange should contain value 5
exchangeRate = this.minask(this.demoStockViewInstance);
targetAmount = 1;
baseAmount = this.exchangeRate;
update(baseAmount) {
this.targetAmount = parseFloat(baseAmount) / this.exchangeRate;
}
<强>更新强>
如果服务返回一个observable,您应该在组件代码中的subscribe
回调中执行计算:
this.surbtcService.getPricess().subscribe(response => {
demoStockViewInstance = response.min_ask
})