」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 學習 Vue 部分 建立天氣應用程式

學習 Vue 部分 建立天氣應用程式

發佈於2024-11-05
瀏覽:309

Learning Vue Part Building a weather app

深入研究 Vue.js 就像在 DIY 工具包中發現了一個新的最喜歡的工具——直觀、靈活,而且功能強大得驚人。我接觸 Vue 的第一個副業專案是一個天氣應用程序,它教會了我很多關於框架功能以及一般 Web 開發的知識。這是我到目前為止所學到的。

1. Vue 入門:簡單與強大

Vue.js 讓我印象深刻的第一件事就是它的啟動和運行是多麼容易。與其他一些需要大量設定和配置的框架不同,Vue 非常簡單。我所需要的只是一個包含 Vue 的腳本標籤,然後我就開始參加比賽了。

在我的天氣應用程式中,我使用 Vue 的 createApp 函數來啟動我的應用程式:

const { createApp, ref } = Vue;

createApp({
    setup() {
        const locationValue = ref('');
        const responseMessage = ref(null);
        const selectedHourlyForecast = ref([]);
        const selectedFutureForecast = ref([]);
        // More code here...
    }
}).mount("#app")

這種方法很乾淨,並將所有內容放在一個地方,從而更容易管理應用程式的狀態和邏輯。

2. 反應式資料綁定:ref 的魔力

Vue 的反應系統是其突出的功能之一。透過使用 ref,我能夠使資料具有反應性,這意味著對資料的任何更改都會自動更新 DOM。例如,當使用者提交位置時,無需任何手動 DOM 操作即可取得並顯示天氣資料:

const locationValue = ref('');
const responseMessage = ref(null);

const submitLocation = async () => {
    try {
        const response = await fetch(`http://api.weatherapi.com/v1/forecast.json?key=${APIKEY}&q=${locationValue.value}&days=6&aqi=no&alerts=no`);
        const result = await response.json();
        responseMessage.value = result;
    } catch (error) {
        console.log("An error occurred while fetching weather data", error);
        alert("Location not found");
    }
};

基於資料變化的 UI 無縫更新使得 Vue.js 在建立互動式應用程式方面變得異常強大。

3. 條件渲染:僅顯示需要的內容

Vue 的 v-if 和 v-else 等指令可以輕鬆根據資料狀態有條件地渲染元素。在我的天氣應用程式中,我使用這些指令僅在天氣資料可用時顯示天氣資料:

{{responseMessage.current.temp_c}}°C
{{responseMessage.location.name}}, {{responseMessage.location.country}}
N/A °C
No location present

這種條件渲染可確保應用程式保持乾淨且資訊豐富,僅在使用者需要查看時向使用者顯示他們需要查看的內容。

4. 處理使用者輸入:v-model 的力量

使用 v-model 指令在 Vue.js 中處理使用者輸入變得輕而易舉。在我的應用程式中,我使用 v-model 將輸入欄位直接綁定到我的 locationValue 變量,使其具有反應性並保持資料與使用者的輸入同步:

這種簡單的綁定消除了對手動事件偵聽器的需要,減少了樣板程式碼並使應用程式更易於維護。

5. 分解天氣資料:使用 v-for 迭代

使用 Vue 的 v-for 指令可以輕鬆顯示多個數據,例如每小時或未來的天氣預報。這允許我循環遍歷資料數組並動態渲染它們:

{{forecast.temp_c}}°C
{{forecast.condition.text}}
{{forecast.time.slice(11,16)}}

這使得創建靈活且響應靈敏的 UI 變得容易,該 UI 可以根據用戶的位置和一天中的時間顯示不同數量的數據點。

6. 錯誤處理:不要忘記捕獲那些異常

使用 API 總是可能會出現錯誤,無論是網路問題還是無效位置。 Vue 可以輕鬆優雅地處理這些錯誤,確保應用程式在出現問題時不會崩潰:

catch (error) {
    console.log("An error occurred while fetching weather data", error);
    alert("Unable to retrieve weather details");
}

這幫助我了解錯誤處理對於建立能夠處理意外情況的健全應用程式的重要性。

總結

使用 Vue.js 建立這個天氣應用程式是一次富有啟發性的體驗。我學到了很多關於如何建立應用程式以及建立根據使用者輸入即時更新的響應式 UI 的知識。 Vue 的簡單性和靈活性使這個過程變得愉快,我很高興繼續探索我還可以使用這個強大的框架來建立什麼。

如果您正在考慮深入研究 Vue.js,我強烈建議您從一個小型專案(例如天氣應用程式)開始。這是學習基礎知識同時建立可以實際使用的有形東西的好方法。

請留意我將在學習#Vue 時很快建立的下一個專案。快樂編碼!

版本聲明 本文轉載於:https://dev.to/willowjr/learning-vue-part-1-building-a-weather-app-4110?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • CSS 媒體查詢
    CSS 媒體查詢
    確保網站在各種裝置上無縫運作比以往任何時候都更加重要。隨著用戶透過桌上型電腦、筆記型電腦、平板電腦和智慧型手機造訪網站,響應式設計已成為必要。響應式設計的核心在於媒體查詢,這是一項強大的 CSS 功能,可讓開發人員根據使用者裝置的特徵應用不同的樣式。在本文中,我們將探討什麼是媒體查詢、它們如何運作以...
    程式設計 發佈於2024-11-05
  • 了解 JavaScript 中的提升:綜合指南
    了解 JavaScript 中的提升:綜合指南
    JavaScript 中的提升 提升是一種行為,其中變數和函數聲明在先前被移動(或「提升」)到其包含範圍(全域範圍或函數範圍)的頂部程式碼被執行。這意味著您可以在程式碼中實際聲明變數和函數之前使用它們。 變數提升 變數 用 var 宣告的變數被提升...
    程式設計 發佈於2024-11-05
  • 將 Stripe 整合到單一產品 Django Python 商店中
    將 Stripe 整合到單一產品 Django Python 商店中
    In the first part of this series, we created a Django online shop with htmx. In this second part, we'll handle orders using Stripe. What We'll...
    程式設計 發佈於2024-11-05
  • 在 Laravel 測試排隊作業的技巧
    在 Laravel 測試排隊作業的技巧
    使用 Laravel 應用程式時,經常會遇到命令需要執行昂貴任務的情況。為了避免阻塞主進程,您可能決定將任務卸載到可以由佇列處理的作業。 讓我們來看一個例子。想像一下指令 app:import-users 需要讀取一個大的 CSV 檔案並為每個條目建立一個使用者。該命令可能如下所示: /* Imp...
    程式設計 發佈於2024-11-05
  • 如何創建人類層級的自然語言理解 (NLU) 系統
    如何創建人類層級的自然語言理解 (NLU) 系統
    Scope: Creating an NLU system that fully understands and processes human languages in a wide range of contexts, from conversations to literature. ...
    程式設計 發佈於2024-11-05
  • 如何使用 JSTL 迭代 HashMap 中的 ArrayList?
    如何使用 JSTL 迭代 HashMap 中的 ArrayList?
    使用JSTL 迭代HashMap 中的ArrayList在Web 開發中,JSTL(JavaServer Pages 標準標記庫)提供了一組標記來簡化JSP 中的常見任務( Java 伺服器頁面)。其中一項任務是迭代資料結構。 要迭代 HashMap 及其中包含的 ArrayList,可以使用 JS...
    程式設計 發佈於2024-11-05
  • Encore.ts — 比 ElysiaJS 和 Hono 更快
    Encore.ts — 比 ElysiaJS 和 Hono 更快
    几个月前,我们发布了 Encore.ts — TypeScript 的开源后端框架。 由于已经有很多框架,我们想分享我们做出的一些不常见的设计决策以及它们如何带来卓越的性能数据。 性能基准 我们之前发布的基准测试显示 Encore.ts 比 Express 快 9 倍,比 Fasti...
    程式設計 發佈於2024-11-05
  • 為什麼使用 + 對字串文字進行字串連接失敗?
    為什麼使用 + 對字串文字進行字串連接失敗?
    連接字串文字與字串在 C 中,運算子可用於連接字串和字串文字。但是,此功能存在限制,可能會導致混亂。 在問題中,作者嘗試連接字串文字「Hello」、「,world」和「!」以兩種不同的方式。第一個例子:const string hello = "Hello"; const str...
    程式設計 發佈於2024-11-05
  • React 重新渲染:最佳效能的最佳實踐
    React 重新渲染:最佳效能的最佳實踐
    React高效率的渲染機制是其受歡迎的關鍵原因之一。然而,隨著應用程式複雜性的增加,管理元件重新渲染對於最佳化效能變得至關重要。讓我們探索優化 React 渲染行為並避免不必要的重新渲染的最佳實踐。 1. 使用 React.memo() 作為函數式元件 React.memo() 是...
    程式設計 發佈於2024-11-05
  • 如何實作條件列建立:探索 Pandas DataFrame 中的 If-Elif-Else?
    如何實作條件列建立:探索 Pandas DataFrame 中的 If-Elif-Else?
    Creating a Conditional Column: If-Elif-Else in Pandas給定的問題要求將新列新增至DataFrame 中基於一系列條件標準。挑戰在於在實現這些條件的同時保持程式碼效率和可讀性。 使用函數應用程式的解決方案一種方法涉及創建一個將每一行映射到所需結果的函...
    程式設計 發佈於2024-11-05
  • 介紹邱!
    介紹邱!
    我很高興地宣布發布 Qiu – 一個嚴肅的 SQL 查詢運行器,旨在讓原始 SQL 再次變得有趣。老實說,ORM 有其用武之地,但當您只想編寫簡單的 SQL 時,它們可能會有點不知所措。我一直很喜歡寫原始 SQL 查詢,但我意識到我需要練習——大量的練習。這就是Qiu發揮作用的地方。 有了 Qiu...
    程式設計 發佈於2024-11-05
  • 為什麼 CSS 中的 Margin-Top 百分比是根據容器寬度計算的?
    為什麼 CSS 中的 Margin-Top 百分比是根據容器寬度計算的?
    CSS 中的 margin-top 百分比計算CSS 中的 margin-top 百分比計算當對元素應用 margin-top 百分比時,必須了解計算方式執行。與普遍的看法相反,邊距頂部百分比是根據包含塊的寬度而不是其高度來確定的。 W3C 規範解釋:W3C 規範解釋:根據W3C 規範,“百分比是根...
    程式設計 發佈於2024-11-05
  • 如何解決 CSS 轉換期間 Webkit 文字渲染不一致的問題?
    如何解決 CSS 轉換期間 Webkit 文字渲染不一致的問題?
    解決CSS 轉換期間的Webkit 文本渲染不一致在CSS 轉換期間,特別是縮放元素時,Webkit 中可能會出現文本渲染不一致的情況瀏覽器。這個問題源自於瀏覽器嘗試優化渲染效能。 一種解決方案是透過添加以下屬性來強制對過渡元素的父元素進行硬體加速:-webkit-transform: transl...
    程式設計 發佈於2024-11-05
  • 使用 Reactables 簡化 RxJS
    使用 Reactables 簡化 RxJS
    介紹 RxJS 是一個功能強大的庫,但眾所周知,它的學習曲線很陡峭。 這個函式庫龐大的 API 介面,再加上向反應式程式設計的典範轉移,可能會讓新手不知所措。 我創建了 Reactables API 來簡化 RxJS 的使用並簡化開發人員對反應式程式設計的介紹。 ...
    程式設計 發佈於2024-11-05
  • 如何在 Pandas 中找到多列的最大值?
    如何在 Pandas 中找到多列的最大值?
    找出 Pandas 中多列的最大值要確定 pandas DataFrame 中多列的最大值,可以採用多種方法。以下是實現此目的的方法:對指定列使用max() 函數此方法涉及明確選擇所需的列並應用max() 函數: df[["A", "B"]] df[[&quo...
    程式設計 發佈於2024-11-05

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3