Build a Real-Time Cryptocurrency Price Dashboard with Vue and Axios

·

Creating a real-time cryptocurrency price dashboard is an excellent way to learn modern web development techniques using Vue.js and Axios. This guide walks you through building a fully functional dashboard that fetches live crypto prices from an API, processes the data, and displays it in a clean, responsive interface — all using lightweight, widely adopted tools.

By the end of this tutorial, you’ll understand how to:

Whether you're new to frontend development or brushing up on modern practices, this hands-on project delivers practical skills applicable to countless real-world scenarios.


Why Use Vue + Axios for Real-Time Data Apps?

Vue.js offers a gentle learning curve with powerful reactivity, making it ideal for dynamic user interfaces. Axios, a promise-based HTTP client, simplifies communication with RESTful APIs — essential for pulling live financial data like cryptocurrency prices.

Together, they form a robust stack for building data-driven applications without the complexity of larger frameworks.

Core Keywords:
Vue.js, Axios, real-time cryptocurrency prices, API integration, frontend dashboard, HTTP requests, data visualization


Step 1: Set Up a Basic Vue Application

Start by creating a simple HTML file called index.html. This will serve as the foundation of your dashboard.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>Crypto Price Dashboard</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/foundation.min.css" />
  <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
</head>
<body>
  <div id="app" class="container">
    <h1 class="text-center">Crypto Price Dashboard</h1>
    <div class="grid-x grid-margin-x">
      <div class="cell medium-4" v-for="(result, index) in results" :key="index">
        <div class="card">
          <div class="card-section">
            <h4>{{ index }}</h4>
            <p>¥ {{ result.CNY }}</p>
            <p>$ {{ result.USD }}</p>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
</html>

This template includes:

👉 Discover how easy it is to manage real-time crypto data with modern tools.


Step 2: Separate JavaScript Logic

To keep your code organized, move the Vue logic into a separate file named vueApp.js.

First, remove the inline script from index.html and add:

<script src="vueApp.js"></script>

Now create vueApp.js with initial mock data:

const vm = new Vue({
  el: '#app',
  data: {
    results: {
      BTC: { CNY: 73759.99, USD: 3166.21 },
      ETH: { CNY: 33581.77, USD: 2336.25 },
      LINK: { CNY: 182.62, USD: 26.49 }
    }
  }
});

This modular approach separates concerns — HTML handles presentation, while JavaScript manages data. It's easier to debug and scale.


Step 3: Replace Mock Data with Live API Calls Using Axios

Now it’s time to fetch real-time cryptocurrency prices. We'll use the free CryptoCompare API:

https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH,LINK&tsyms=CNY,USD

Install Axios via CDN

Add Axios to your index.html before vueApp.js:

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="vueApp.js"></script>

Update vueApp.js to Use Axios

Replace the static data with an API call inside Vue’s mounted() lifecycle hook:

const url = "https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH,LINK&tsyms=CNY,USD";

new Vue({
  el: '#app',
  data: {
    results: {}
  },
  mounted() {
    axios.get(url)
      .then(response => {
        this.results = response.data;
      })
      .catch(error => {
        console.error("Failed to fetch data:", error);
      });
  }
});

When the page loads, Vue automatically calls the API and updates the UI with live prices — no manual DOM manipulation needed.

👉 See how seamless API integration can streamline your development workflow.


Step 4: Enhance Error Handling and UX

Improve reliability by adding loading states and error messages.

Update your data and template:

In vueApp.js

data: {
  results: {},
  loading: true,
  error: null
},
mounted() {
  axios.get(url)
    .then(response => {
      this.results = response.data;
    })
    .catch(err => {
      this.error = "Unable to load crypto prices. Please try again later.";
      console.error(err);
    })
    .finally(() => {
      this.loading = false;
    });
}

In index.html (Add Conditional Rendering)

<div v-if="loading" class="callout info">Loading latest prices...</div>
<div v-if="error" class="callout alert">{{ error }}</div>
<div v-if="!loading && !error" class="grid-x grid-margin-x">
  <!-- Existing card loop -->
</div>

These small additions significantly improve user experience during network delays or failures.


Frequently Asked Questions (FAQ)

Q: What is Axios used for in Vue applications?

A: Axios is used to make HTTP requests to external APIs. In this project, it fetches real-time cryptocurrency prices so Vue can display them dynamically on the page.

Q: Can I use other APIs instead of CryptoCompare?

A: Yes! Any public JSON API works with Axios. Popular alternatives include CoinGecko and Binance Market Data APIs. Just adjust the URL and response handling accordingly.

Q: Is Axios better than Fetch for Vue projects?

A: Axios provides built-in JSON parsing, interceptors, and better error handling compared to the native Fetch API. For most Vue apps, Axios offers a smoother developer experience.

Q: How often does the price update?

A: In this version, prices load once when the page opens. To enable auto-updates every 30 seconds, wrap the axios.get() call in setInterval() inside mounted().

Q: Do I need Node.js or a build system?

A: No. This example runs entirely in the browser using CDNs. However, for larger projects, consider using npm and a bundler like Vite or Webpack.

Q: Can I add more cryptocurrencies?

A: Absolutely. Just add their symbols (e.g., ADA, DOT) to the fsyms parameter in the API URL. The response will include their prices automatically.


Advanced Axios Patterns You Should Know

Handle GET Requests with Parameters

axios.get('/api/data', {
  params: { fsyms: 'BTC,ETH', tsyms: 'USD,EUR' }
});

Send Headers (e.g., Authentication)

axios.get('/api/protected', {
  headers: { 'Authorization': 'Bearer your-token' }
});

POST Data to an Endpoint

axios.post('/api/save', { coin: 'BTC', alertPrice: 50000 });

Use Async/Await Syntax

async mounted() {
  try {
    const response = await axios.get(url);
    this.results = response.data;
  } catch (error) {
    this.error = "Request failed";
  }
}

This syntax improves readability, especially when chaining multiple API calls.

👉 Explore how professional-grade tools simplify real-time data handling.


Final Thoughts

You’ve now built a fully functional real-time cryptocurrency price dashboard using Vue.js and Axios. You’ve learned how to:

These foundational skills are transferable to weather apps, stock trackers, news feeds, and more.

While coding gives you full control, remember that tools like OKX offer powerful pre-built solutions for tracking digital assets — ideal if you want instant access without development overhead.

With practice, you’ll be able to create sophisticated dashboards that pull from multiple APIs, support user preferences, and even send price alerts — all with confidence in your frontend toolkit.