Angular 4、Typescrypt Bitcoin Currency Exchange - 算术运算的右边必须是'any'、'number'或枚举类型
Angular 4, Typescrypt Bitcoin Currency Exchange - The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type
我试图在 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;
}
在/this.exchangeRate;我收到此错误:
The right-hand side of an arithmetic operation must be of type 'any',
'number' or an enum type
我怎样才能避免这种情况?感谢您的帮助!
编辑:
这是我获取要在 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());
}
}
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;
}
更新:
如果服务 returns 是可观察的,您应该在组件代码中的 subscribe
回调中执行计算:
this.surbtcService.getPricess().subscribe(response => {
demoStockViewInstance = response.min_ask
})
我试图在 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;
}
在/this.exchangeRate;我收到此错误:
The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type
我怎样才能避免这种情况?感谢您的帮助!
编辑:
这是我获取要在 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());
}
}
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;
}
更新:
如果服务 returns 是可观察的,您应该在组件代码中的 subscribe
回调中执行计算:
this.surbtcService.getPricess().subscribe(response => {
demoStockViewInstance = response.min_ask
})