我尝试使用cryptocompar中的API来获取数据。
更新了更多详细信息,并从代码中删除了ngClass。 在test.ts
// data from library page
coinsGroup = [];
datainfo: Observable<any>;
coins:any;
constructor(public navCtrl: NavController, public navParams: NavParams, public http: HttpClient)
{
}
ionViewDidLoad()
{
console.log('ionViewDidLoad TestPage');
this.coinsGroup = this.navParams.data;
}
getdetail(coin) {
this.datainfo = this.http.get("https://min-api.cryptocompare.com/data/pricemultifull?fsyms="+coin+"&tsyms=USD");
this.datainfo.map(res => res)
.subscribe(data => {
this.coins = data['DISPLAY'][coin]['USD']['PRICE']
console.log('my data: ', this.coins);
});
}
on test.html
的
的
<span *ngIf="coinsGroup.symbol" class="bold1">
{{getDetail(coinsGroup.symbol)}}</span>
的 coinsGroup将从图书馆页面中获取符号,例如[&#39; BTC&#39;,&#39; ETH&#39;,...等]
在chrome上的控制台上,它会保持循环,如下所示,直到浏览器崩溃。
当使用subscribe()和map时会导致无限循环,如上所示,不确定原因,以及如何解决这个问题?
答案 0 :(得分:3)
是。
<span [ngClass]="getdetail('BTC')" class="bold1">{{ coins }}</span>
是问题所在。 ngClass
尝试为string
设置class
值。 (所以你可以申请css)。这不是你想要做的,你试图检索所有硬币,然后显示它们。
这样做的方法是这样的:
datainfo: Observable<any>;
coins:any;
constructor(public navCtrl: NavController, public navParams: NavParams, public http: HttpClient)
{}
// load the coins after the view is loaded, can also be done on ngOnInit
ionViewDidLoad(){
this.getDetail('BTC');
}
getdetail(coin) {
this.datainfo = this.http.get("https://min-api.cryptocompare.com/data/pricemultifull?fsyms="+coin+"&tsyms=USD");
this.datainfo
.map(res=>res)
.subscribe(data => {
this.coins = data
console.log('my data: ', this.coins);
});
}
只需设置
即可<ion-content padding>
<div style="text-align: center;">
<!-- the ngIf directive will only show this span if `coins` is defined -->
<span *ngIf="coins" class="bold1">{{ coins }}</span>
</div>
</ion-content>
如果您想创造更多硬币,最佳做法可能如下:
let coinList = ["BTC", "ETH", "LTE"];
constructor(/* ... */) {}
getDetail(coin): Observable<any> {
// don't subscribe, return Observable
this.http.get("...").map(res=>res);
}
在你的HTML中
<ion-content padding>
<div style="text-align: center;">
<span *ngFor="let coin of coinList" class="bold1">
{{ getDetail(coin) | async }}
</span>
</div>
</ion-content>
答案 1 :(得分:1)
您的观点应该是被动的,它应该只显示结果。在这里,您在视图显示中调用一个更改数据的函数,这可能会改变视图,从而更改数据...等等......
答案 2 :(得分:0)
我删除了如上所示的ngClass,但仍然在循环。
//来自库页面的数据coinsGroup = [];
datainfo:Observable;
硬币:任何;
构造函数(public navCtrl:NavController,public navParams: NavParams,公共http:HttpClient){}
ionViewDidLoad(){
console.log('ionViewDidLoad TestPage'); this.coinsGroup = this.navParams.data; }
getdetail(硬币){
this.datainfo = this.http.get("https://min-api.cryptocompare.com/data/pricemultifull?fsyms="+coin+"&tsyms=USD"); this.datainfo.map(res => res) .subscribe(data => { this.coins = data['DISPLAY'][coin]['USD']['PRICE'] console.log('my data: ', this.coins); }); }
on test.html
* ngIf =“coinsGroup.symbol”class =“bold1”&gt;
{{getDetail(coinsGroup.symbol)}}