Home > Enterprise >  Current exchange rate using Angular
Current exchange rate using Angular

Time:11-07

I want to make a currency converter and also display the current exchange rate (dollar and euro) against the hryvnia, I made the converter myself, but I'm racking my brains with the exchange rate.

<div>
  <p > 1 USD <span>=</span> {{}}</p>
  <p>1 EUR <span>=</span> {{}}</p>
</div>
<div >
  <div >
    <input #c3  min="1" type="text" (mouseleave)="amounts(c3.value)" required>
    <select #c1 name="" id="country1" (mouseleave)="changebase(c1.value)">
      <option value="USD">US dollar</option>
      <option value="EUR">Euro</option>
      <option value="UAH">Ukranian Grivna</option>
    </select>
    <p>  to </p>

    <select #c2  name="" id="country1" (mouseleave)="tocountry(c2.value)">
      <option value="USD">US dollar</option>
      <option value="EUR">Euro</option>
      <option value="UAH">Ukranian Grivna</option>
    </select>
  </div>
  <button (click)="convert()"> Submit</button>
  <div >
    <p>{{base}} <span>=</span>{{result}} {{cont2}}</p>


  </div>
</div>

In the first div, I want to display the current exchange rate

import { Injectable } from '@angular/core';
import {HttpClient} from "@angular/common/http"

@Injectable({
providedIn: 'root'
})
export class CurrencydataService {

constructor(private http:HttpClient) { }
getcurrencydata(country1:string){
let url ="https://api.exchangerate.host/latest?base=USD" country1
return this.http.get(url)
}
}

my server request

import { Component } from '@angular/core';
import { CurrencydataService } from './currencydata.service';

@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: \['./app.component.css'\]
})
export class AppComponent {
title = 'my-app';
currjson:any =\[\];

curencyuds = "USD";
currencyeur ="EUR"

base ="USD";
cont2="USD";
result:any = \[\];
amount:any = \[\];

changebase(a:string){
this.base =a;
console.log(this.base)
}
tocountry(b:string){
this.cont2 = b;
console.log(this.cont2)

}

amounts(c:string){
this.amount = c;
console.log(this.amount)

}

constructor(private currency:CurrencydataService){}
convert(){

    console.log(this.base)
    console.log(this.cont2)
    console.log(this.amount)
    
    
    
    this.currency.getcurrencydata(this.base).subscribe(data=>{
      this.currjson= JSON.stringify(data);
      this.currjson= JSON.parse(this.currjson);
      this.amount = JSON.parse(this.amount)
     // this.current =JSON.parse(this.currjson.rates.UAH)
    
    
     console.log(this.result)
     console.log(this.currjson.rates)
     console.log(this.currjson)
    
    
    
    
      if (this.cont2 ==="USD"){
        this.result = this.currjson.rates.USD * (this.amount)
    
      }
    
    
      if (this.cont2 ==="EUR"){
        this.result = this.currjson.rates.EUR * (this.amount)
      }
    
    
      if (this.cont2 ==="UAH"){
        this.result = this.currjson.rates.UAH * (this.amount)
      }
    })

}
}

The logic of my converter.

Please tell me how to extract the data correctly and get the current hryvnia exchange rate against the euro and the dollar

CodePudding user response:

You need to fetch the exchange rates when the component initialises

  • Add a new method in the service that gets all exchange rates for a single currency.
  • In ngOnInit fetch all the exchange rates for UAH.
  • Assign the exchange value to variables and display then in the template.

Hope this helps

<div>
  <p>1 USD <span>=</span> {{uahToUsd}} UAH</p>
  <p>1 EUR <span>=</span> {{uahToEur}} UAH</p>
</div>
// Service

export class CurrencydataService {
  constructor(private http: HttpClient) {}
  getcurrencydata(country1: string) {
    let url = 'https://api.exchangerate.host/latest?base=USD'   country1;
    return this.http.get(url);
  }

  getBaseCurrencyData(country1: string) {
    let url = 'https://api.exchangerate.host/latest?base='   country1;
    return this.http.get(url);
  }
}


// Component
export class AppComponent implements OnInit {

  currjson: any = [];

  curencyuds = 'USD';
  currencyeur = 'EUR';
  currencyuah = 'UAH';

  uahToUsd = 0;
  uahToEur = 0;

  ngOnInit() {
    this.getBaseRates();
  }

  getBaseRates() {
    this.currency
      .getBaseCurrencyData(this.currencyuah)
      .subscribe((data: any) => {
        const rates = data.rates;

        this.uahToUsd = 1/rates[this.curencyuds]
        this.uahToEur = 1/rates[this.currencyeur]
      });
  }

  ... // Rest of your code
}


  • Related