如何使用 Vue.js 和 Axios 顯示 API 中的數(shù)據(jù)

內(nèi)容

Vue.js 是用于構(gòu)建用戶界面的前端 JavaScript 框架。 它從一開始就設(shè)計為可逐步采用塞赂,能和其他圖書館或現(xiàn)有項目很好地結(jié)合泪勒。 這使得它非常適合小型項目以及與其他工具和庫一起使用時復(fù)雜的單頁面應(yīng)用程序。

API 應(yīng)用程序接口是允許兩個應(yīng)用程序相互通信的軟件中介宴猾。 API 經(jīng)常公開其他開發(fā)人員在自己的應(yīng)用程序中使用的數(shù)據(jù)圆存,而不必擔心數(shù)據(jù)庫或編程語言的差異。 開發(fā)人員往往從返回 JSON 格式數(shù)據(jù)的 API 中獲取數(shù)據(jù)仇哆,他們把這些數(shù)據(jù)集成到前端應(yīng)用程序中沦辙。,Vue.js 非常適合使用這些 API 。

在本教程中讹剔,您將創(chuàng)建一個 Vue 應(yīng)用程序油讯,該應(yīng)用程序使用 CryptoCompare API 顯示兩種主要加密貨幣的當前價格:比特幣和 Etherium。 除了 Vue 之外延欠,您還將使用 Axios 庫來發(fā)出 API 請求并處理獲得的結(jié)果陌兑。

Axios 非常適合,因為它可以自動將 JSON 數(shù)據(jù)轉(zhuǎn)換為 JavaScript 對象衫冻,并且它支持 Promises诀紊,從而使代碼更易于閱讀和調(diào)試。 為了讓事情看起來不錯隅俘,我們將使用基礎(chǔ) CSS 框架邻奠。

注意:CryptoCompare API 僅可用于非商業(yè)用途。 如果您希望在商業(yè)項目中使用它为居,請查看其許可條款碌宴。

先決條件

在開始本教程之前,您需要以下內(nèi)容:

  • 支持 JavaScript 語法突出顯示的文本編輯器蒙畴,例如 Atom贰镣,Visual Studio Code 或 Sublime Text 呜象。這些編輯器可以在Windows、macOS 和 Linux 上使用碑隆。
  • 熟悉一起使用 HTML 和 JavaScript 恭陡。 詳細知道如何將 JavaScript 添加到 HTML 。
  • 熟悉 JSON 數(shù)據(jù)格式上煤,您可以在 JavaScript 中了解如何使用 JSON 休玩。
  • 熟悉向 API 發(fā)出請求。 有關(guān) API 的詳細教程劫狠,請參閱 如何在 Python3 中使用 Web API 拴疤。 雖然它是為 Python 編寫的,但它仍然可以幫助您理解使用 API 的核心概念独泞。

第1步 – 創(chuàng)建基本 Vue 應(yīng)用程序

讓我們創(chuàng)建一個基本的 Vue 應(yīng)用程序呐矾。 我們將構(gòu)建一個包含一些模擬數(shù)據(jù)的 HTML 頁面,我們最終將使用 API 中的實時數(shù)據(jù)替換這些數(shù)據(jù)懦砂。 我們將使用 Vue.js 來顯示這個模擬數(shù)據(jù)蜒犯。

對于第一步,我們將所有代碼保存在一個文件中孕惜。使用文本編輯器創(chuàng)建一個名為 index.html 的新文件愧薛。在此文件中,添加以下 HTML 標記衫画,該標記定義 HTML 框架,并從內(nèi)容交付網(wǎng)絡(luò)(CDN)中提取 Foundation CSS 框架和 Vue.js 庫瓮栗。 通過使用 CDN削罩,您不需要下載額外的代碼即可開始構(gòu)建應(yīng)用程序。

<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" 
     >
  <meta charset="utf-8">
  <title>Cryptocurrency Pricing Application</title>
</head>
  <body>
    <div class="container" id="app">
      <h3 class="text-center">Cryptocurrency Pricing</h3>
      <div class="columns medium-4" >
        <div class="card">
          <div class="card-section">
            <p> BTC in USD  </p>
          </div>
          <div class="card-divider">
            <p>{{ BTCinUSD }}</p>
          </div>
        </div>
      </div>
    </div>
    <script src="https://unpkg.com/vue"></script>
  </body>
</html>

行 {{BTCinUSD}} 是 Vue.js 將提供的數(shù)據(jù)的占位符费奸, 這就是 Vue 如何讓我們在 UI 中以聲明方式呈現(xiàn)數(shù)據(jù)的方式弥激。 讓我們定義那些數(shù)據(jù)。
在包含 Vue 的 < script > 標記的正下方愿阐,添加此代碼微服,創(chuàng)建一個新的 Vue 應(yīng)用程序并定義我們將在頁面上顯示的數(shù)據(jù)結(jié)構(gòu):

<script>
      const vm = new Vue({
              el: '#app',
              //Mock data for the value of BTC in USD
              data: { BTCinUSD: 3759.91}
            });
    </script>

此代碼創(chuàng)建一個新的 Vue 應(yīng)用程序?qū)嵗嵗郊拥?id 為 app 的元素缨历,Vue 將此過程稱為安裝應(yīng)用程序以蕴。

我們定義一個新的 Vue 實例并通過傳遞配置對象來配置它。 該對象包含一個 el 選項辛孵,它指定我們要在其上安裝此應(yīng)用程序的元素的 id丛肮,以及一個包含我們想要的視圖數(shù)據(jù)的數(shù)據(jù)選項。

在此示例中,我們的數(shù)據(jù)模型包含一個鍵值對,其中包含比特幣價格的模擬值:{BTCinUSD:3759.91}昧旨。 這些數(shù)據(jù)將顯示在我們的 HTML 頁面或我們的視圖中陷虎,在這里我們將密鑰括在雙花括號中上祈,如下所示:

<div class="card-divider">
  <p>{{ BTCinUSD }}</p>
</div>

我們最終將使用 API 中的實時數(shù)據(jù)替換此硬編碼值忽肛。
在瀏覽器中打開此文件温鸽。 您將在屏幕上看到以下輸出寄月,其中顯示模擬數(shù)據(jù):


image.png

我們用美元顯示價格诽里。 如果要以歐元等其他貨幣顯示袒餐,我們需要在數(shù)據(jù)模型中添加另一個鍵值對,并在標記中添加另一列须肆。
首先匿乃,更改數(shù)據(jù)模型:

<script>
  const vm = new Vue({
          el: '#app',
          //Mock data for the value of BTC in USD
          data: { BTCinUSD: 3759.91, BTCinEURO:3166.21 }
        });
  </script>

然后在標記中添加一個新部分,在現(xiàn)有代碼下方以歐元顯示價格

<div class="container" id="app">
    <h3 class="text-center">Cryptocurrency Pricing</h3>
    <div class="columns medium-4" >
      <div class="card">
        <div class="card-section">
          <p> BTC in USD  </p>
        </div>
        <div class="card-divider">
          {{BTCinUSD}}
        </div>
      </div>
    </div>
 
    <div class="columns medium-4" >
      <div class="card">
        <div class="card-section">
          <p> BTC in EURO  </p>
        </div>
        <div class="card-divider">
          {{BTCinEURO}}
        </div>
      </div>
    </div>
 
  </div>

保存文件并在瀏覽器中重新加載豌汇。 該應(yīng)用程序現(xiàn)在以歐元和美元顯示比特幣的價格幢炸。


image.png

我們在一個文件中完成了所有工作。 讓我們分解一下來提高可維護性拒贱。

第2步 – 清晰度分離 JavaScript 和 HTML

為了了解工作原理宛徊,我們將所有代碼放在一個文件中。 現(xiàn)在讓我們將應(yīng)用程序代碼分成兩個單獨的文件逻澳,index.html 和 VueApp.js闸天。 index.html 文件將處理標記部分,JavaScript文件將包含應(yīng)用程序邏輯斜做。 這將使我們的應(yīng)用程序更易于維護苞氮。 我們將兩個文件保存在同一目錄中。

首先瓤逼,修改 index.html 文件并刪除 JavaScript 代碼笼吟,將其替換為 VueApp.js 文件的鏈接。

找到文件的這一部分:

<script src="https://unpkg.com/vue"></script>
    <script  language="JavaScript">
    const vm = new Vue({
            el: '#app',
            // Mock data for the value of BTC in USD
            data: { BTCinUSD: 3759.91, BTCinEURO:3166.21 }
          });
    </script>

并修改它霸旗,使它看起來像這樣:

<script src="https://unpkg.com/vue"></script>
    <script src="vueApp.js"></script>

然后在與 index.html 文件相同的目錄中創(chuàng)建 VueApp.js 文件贷帮。

在這個新文件中,放置最初在 index.html 文件中的相同 JavaScript 代碼诱告,不帶 < script > 標記:

const vm = new Vue({
        el: '#app',
        // Mock data for the value of BTC in USD
        data: { BTCinUSD: 3759.91, BTCinEURO: 3166.21 }
      })

保存文件并在瀏覽器中重新加載 index.html撵枢。 您將看到之前看到的相同結(jié)果。

我們想要支持比 Bitcoiin 更多的加密貨幣精居,所以讓我們來看看我們是如何做到這一點的锄禽。

第3步 – 使用 Vue 迭代數(shù)據(jù)

我們目前正在展示一些比特幣價格的模擬數(shù)據(jù)。 但是我們也要添加 Etherium箱蟆。 為此沟绪,我們將重組數(shù)據(jù)并修改視圖以使用新數(shù)據(jù)。
打開 VueApp.js 文件并修改數(shù)據(jù)模型空猜,使其如下所示:

const vm = new Vue({
        el: '#app',
        data: {
          results: {"BTC": {"USD":3759.91,"EUR":3166.21},
                    "ETH": {"USD":281.7,"EUR":236.25}}
        }
      });

使用嵌套數(shù)據(jù)結(jié)構(gòu)绽慈,我們的數(shù)據(jù)模型變得更加復(fù)雜恨旱。 我們現(xiàn)在有一個名為 results 的鍵,其中包含兩個記錄: 一個用于比特幣價格坝疼,另一個用于 Etherium 價格搜贤。 這個新結(jié)構(gòu)將讓我們減少一些重復(fù)的視圖。 它也類似于我們從 CryptoCompare API 獲得的數(shù)據(jù)钝凶。

保存文件仪芒。 現(xiàn)在修改我們的標記,以更加編程的方式處理數(shù)據(jù)耕陷。

打開 index.html 文件掂名,找到我們顯示比特幣價格的文件的這一部分:

<div class="columns medium-4" >
      <div class="card">
        <div class="card-section">
          <p> BTC in USD  </p>
        </div>
        <div class="card-divider">
          {{BTCinUSD}}
        </div>
      </div>
    </div>
 
    <div class="columns medium-4" >
      <div class="card">
        <div class="card-section">
          <p> BTC in EURO  </p>
        </div>
        <div class="card-divider">
          {{BTCinEURO}}
        </div>
      </div>
    </div>

將其替換為以下代碼,該代碼迭代您定義的數(shù)據(jù)集哟沫。

<div class="columns medium-4" v-for="(result, index) in results">
    <div class="card">
      <div class="card-section">
        <p> {{ index }} </p>
      </div>
      <div class="card-divider">
        <p>$ {{ result.USD }}</p>
      </div>
      <div class="card-section">
        <p> € {{ result.EUR }}</p>
      </div>
    </div>
  </div>

此代碼使用 v-fo r指令饺蔑,其作用類似于 for 循環(huán)。 它迭代我們數(shù)據(jù)模型中的所有鍵值對嗜诀,并顯示每個鍵值對的數(shù)據(jù)猾警。

當您在瀏覽器中重新加載它時,您將看到模擬的價格:


image.png

此修改允許我們在 VueApp.js 中為結(jié)果數(shù)據(jù)添加新貨幣隆敢,并使其顯示在頁面上而無需進一步更改发皿。

將另一個模擬條目添加到數(shù)據(jù)集以嘗試此操作:

const vm = new Vue({
        el: '#app',
        data: {
          results: {"BTC":{"USD":3759.91,"EUR":3166.21},
                    "ETH":{"USD":281.7,"EUR":236.25},
                    "NEW Currency":{"USD":5.60,"EUR":4.70}}
        }
      });

在 Etherium 輸入后不要忘記添加尾隨逗號。
如果現(xiàn)在在 Web 瀏覽器中加載頁面拂蝎,您將看到顯示的新條目:


image.png

一旦我們以編程方式處理數(shù)據(jù)穴墅,我們就不需要手動在標記中添加新列。
現(xiàn)在讓我們獲取真實數(shù)據(jù)温自。

第4步 – 從 API 獲取數(shù)據(jù)

現(xiàn)在是時候用來自 CryptoCompare API 的實時數(shù)據(jù)替換我們的模擬數(shù)據(jù)封救,以美元和歐元顯示網(wǎng)頁上比特幣和以太坊的價格。

要獲取我們頁面的數(shù)據(jù)捣作,我們將向以下 URL 發(fā)出請求,該 URL 以美元和歐元請求比特幣和 Etherium:

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

此 API 將返回 JSON 響應(yīng)鹅士。 使用 curl 向 API 發(fā)出請求以查看響應(yīng):

$ curl 'https://min-api.cryptocompare.com/data/pricemulti?fsyms=BTC,ETH&tsyms=USD,EUR'

你會看到這樣的輸出:

Output {"BTC":{"USD":11388.18,"EUR":9469.64},"ETH":{"USD":1037.02,"EUR":865.99}}

此結(jié)果與您在上一步中使用的硬編碼數(shù)據(jù)模型完全相同券躁。 我們現(xiàn)在要做的就是通過從我們的應(yīng)用程序發(fā)出對此 URL 的請求來切換數(shù)據(jù)。

為了發(fā)出請求掉盅,我們將使用 Vue 中的 mounted() 函數(shù)和 Axios 庫的 GET 函數(shù)來獲取數(shù)據(jù)并將其存儲在數(shù)據(jù)模型的結(jié)果數(shù)組中也拜。 一旦將 Vue 應(yīng)用程序安裝到元素上,就會調(diào)用掛載的函數(shù)趾痘。 安裝 Vue 應(yīng)用程序后慢哈,我們將向 API 發(fā)出請求并保存結(jié)果,通知網(wǎng)頁更改永票,并且值將顯示在頁面上卵贱。

首先滥沫,打開 index.html 并通過在包含 Vue 的行下面添加一個腳本來加載 Axios 庫:

<script src="https://unpkg.com/vue"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

保存文件,然后打開 VueApp.js 并對其進行修改键俱,以便向 API 發(fā)出請求并使用結(jié)果填充數(shù)據(jù)模型兰绣。

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

const vm = new Vue({
        el: '#app',
        data: {
          results: []
        },
        mounted() {
          axios.get(url).then(response => {
            this.results = response.data
          })
        }
      });

請注意,我們已刪除結(jié)果的默認值编振,并將其替換為空數(shù)組缀辩。 我們的應(yīng)用程序首次加載時,我們不會有數(shù)據(jù)踪央,但我們不希望事情中斷臀玄。 我們的 HTML 視圖期望一些數(shù)據(jù)在加載時迭代。

axios.get 函數(shù)使用 Promise畅蹂, 當 API 成功返回數(shù)據(jù)時健无,將執(zhí)行 then 塊中的代碼,并將數(shù)據(jù)保存到結(jié)果變量中魁莉。

保存文件并在 Web 瀏覽器中重新加載 index.html 頁面睬涧。 這次你會看到加密貨幣的當前價格。

如果不這樣做旗唁,請查看教程 如何使用 JavaScript Developer Console 并使用 JavaScript 控制臺調(diào)試代碼畦浓。

結(jié)論

在不到50行代碼中,您僅使用三個工具創(chuàng)建了一個消耗 API的 應(yīng)用程序:Vue.js检疫,Axios 和 CryptoCompare API讶请。 您學習了如何在頁面上顯示數(shù)據(jù),迭代結(jié)果屎媳,以及使用 API 的結(jié)果替換靜態(tài)數(shù)據(jù)夺溢。

既然您已了解基礎(chǔ)知識,那么您可以為應(yīng)用程序添加其他功能烛谊。 修改此應(yīng)用程序以顯示其他貨幣风响,或使用您在本教程中學習的技術(shù)使用其他 API 創(chuàng)建其他 Web 應(yīng)用程序。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丹禀,一起剝皮案震驚了整個濱河市状勤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌双泪,老刑警劉巖持搜,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異焙矛,居然都是意外死亡葫盼,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進店門村斟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贫导,“玉大人抛猫,你說我怎么就攤上這事⊥衙ぃ” “怎么了邑滨?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長钱反。 經(jīng)常有香客問我掖看,道長,這世上最難降的妖魔是什么面哥? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任哎壳,我火速辦了婚禮,結(jié)果婚禮上尚卫,老公的妹妹穿的比我還像新娘归榕。我一直安慰自己,他們只是感情好吱涉,可當我...
    茶點故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布刹泄。 她就那樣靜靜地躺著,像睡著了一般怎爵。 火紅的嫁衣襯著肌膚如雪特石。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天鳖链,我揣著相機與錄音姆蘸,去河邊找鬼。 笑死芙委,一個胖子當著我的面吹牛逞敷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灌侣,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼推捐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了侧啼?” 一聲冷哼從身側(cè)響起玖姑,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慨菱,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體戴甩,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡符喝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了甜孤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片协饲。...
    茶點故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡畏腕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茉稠,到底是詐尸還是另有隱情描馅,我是刑警寧澤,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布而线,位于F島的核電站铭污,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏膀篮。R本人自食惡果不足惜嘹狞,卻給世界環(huán)境...
    茶點故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望誓竿。 院中可真熱鬧磅网,春花似錦、人聲如沸筷屡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毙死。三九已至燎潮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間规哲,已是汗流浹背跟啤。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留唉锌,地道東北人隅肥。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像袄简,于是被迫代替她去往敵國和親腥放。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,499評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 主要還是自己看的绿语,所有內(nèi)容來自官方文檔秃症。 介紹 Vue.js 是什么 Vue (讀音 /vju?/,類似于 vie...
    Leonzai閱讀 3,334評論 0 25
  • 一吕粹,vue是什么种柑? Vue.js(讀音 /vju?/, 類似于view) 是一套構(gòu)建用戶界面的漸進式框架。與其他重...
    不成才的IT狗閱讀 3,143評論 0 31
  • 摘要: 2019年最火的前端框架當屬Vue.js了匹耕,很多使用過vue的程序員這樣評價它聚请,“vue.js兼具angu...
    前端js閱讀 7,519評論 3 118
  • 飯費v根發(fā)vv發(fā)給v 干活吧飯費發(fā)虢國夫人 管
    高玉鳳閱讀 226評論 0 0
  • 留影日期約為10月的某一天深夜,于崗頂?shù)罔F口的KFC餐廳! David同學已離開廣東驶赏,在貴州謀生炸卑。親愛的AU、柑子...
    沁妤_閱讀 163評論 0 0