」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 我從使用 Vue.js 建立計算器中學到了什麼

我從使用 Vue.js 建立計算器中學到了什麼

發佈於2024-11-08
瀏覽:733

What I’ve Learned from Building a Calculator with Vue.js

對於我的第四個項目,我使用 Vue.js 開發了一個 計算器 應用程式。對於理解如何處理使用者輸入、顯示動態結果以及使用 JavaScript 執行計算來說,這是一次寶貴的經驗。以下是我在建立此應用程式時學到的主要經驗教訓的細分。

1. 處理使用者輸入並更新顯示

計算器需要接受使用者輸入(數字和運算子)並動態更新顯示。我使用 Vue 的 響應式屬性 來追蹤當前的輸入和結果。 Vue 中的 ref 函數可以輕鬆儲存和修改這些值:

const result = ref('');
const calculated = ref(false);

每次使用者點選數字或運算子時,結果屬性都會更新,確保顯示幕顯示最新的輸入。函數handleClick用於將值追加到結果中:

const handleClick = (value) => {
    if (calculated.value) {
        result.value = value; // Reset the result if a calculation was just completed
        calculated.value = false;
    } else {
        result.value  = value;
    }
}

這是處理使用者互動和基於反應性屬性更新介面的重要課程。

2. 管理運算子:避免冗餘輸入

建置計算器的一個關鍵挑戰是確保不會連續添加多個運算子(例如,避免像 3 4 這樣的輸入)。為了解決這個問題,我添加了一個檢查,如果最後一個字元已經是運算符,則替換運算符:

const handleOperatorClick = (operator) => {
    if (/[ */-]$/.test(result.value)) {
        result.value = result.value.slice(0, -1)   operator; // Replace the last operator
    } else {
        result.value  = operator; // Add the new operator
    }
    calculated.value = false; // Reset flag
};

此方法可確保輸入字串末端僅存在一個運算符,從而提高計算器的穩健性

3. 清除並刪除輸入

計算器需要提供清除所有輸入(使用AC按鈕)或刪除最後一個輸入字元(使用DEL按鈕)的功能。我使用clearAll和clear方法實現了這兩個操作:

  • 全部清除 (AC):重置整個輸入。
const clearAll = () => {
    result.value = '';
    calculated.value = false;
};
  • 刪除最後一個字元 (DEL):刪除輸入字串的最後一個字元。
const clear = () => {
    if (result.value && result.value.length > 0) {
        result.value = result.value.slice(0, -1); // Remove the last character
        if (result.value.length === 0) {
            clearAll(); // If the input is empty, reset everything
        }
    } else {
        clearAll();
    }
};

這是處理字串操作並提供流暢的使用者體驗的有用練習。

4. 執行計算

計算器的核心功能之一是計算使用者輸入的表達式。我使用 JavaScript 內建的 eval() 函數來計算輸入表達式的結果:

const calculate = () => {
    let stringifiedResult = new String(result.value);
    result.value = eval(String(stringifiedResult)); // Evaluate the expression
    calculated.value = true; // Set flag to indicate the calculation is done
};

雖然 eval() 對於這個基本計算器來說簡單而有效,但我已經了解了它在處理任意用戶輸入時帶來的潛在安全風險。在未來的專案中,我可能會探索編寫自訂解析器以提高安全性和靈活性。

5. Vue 和 Bootstrap 的使用者介面

為了建立計算器介面,我使用了 Bootstrap 進行快速響應式設計。這些按鈕排列在網格中,並為數字和運算符提供適當的顏色編碼:

7
8
9
-

我學會如何將Vue的事件處理與Bootstrap的類別相結合,以創建視覺上吸引人的響應式計算器介面。

6. 處理邊緣情況並增強使用者體驗

我在建立計算器時遇到了幾種邊緣情況。例如,在執行計算後,如果使用者輸入新的數字,計算器需要重置先前的結果。這是透過檢查計算標誌來處理的:

if (calculated.value) {
    result.value = value; // Replace the result with the new value
    calculated.value = false; // Reset the calculated flag
}

另一個有用的功能是格式化顯示以使其更加直觀,例如如果使用者改變主意,則自動替換最後一個運算符,從而改善使用者體驗

最終想法:我從建立計算器中獲得了什麼

該專案深入探討了處理動態輸入、管理狀態以及使用 Vue.js 建立乾淨的使用者介面。我獲得了以下領域的實務知識:

  • 狀態管理:如何動態追蹤並更新使用者的輸入和結果。
  • 事件處理:回應使用者操作(數字點擊、操作員點擊、計算結果)。
  • UI/UX注意事項:確保計算機優雅地處理邊緣情況,並提供清晰直覺的使用者介面。
  • 字串操作:解析和操作輸入字串以建立有效的數學表達式。

建立這個計算器是一次有益的經歷,它增強了我管理使用者輸入和使用 Vue.js 創建動態、互動式 Web 應用程式的能力。期待將這些技能應用到更複雜的專案中!

版本聲明 本文轉載於:https://dev.to/willowjr/what-ive-learned-from-building-a-calculator-with-vuejs-3cj7?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何取得 Windows/IIS 伺服器上的完整 URL 以進行準確重新導向?
    如何取得 Windows/IIS 伺服器上的完整 URL 以進行準確重新導向?
    取得Windows/IIS 伺服器上目前頁面的完整URL在Windows/IIS 伺服器上管理重新導向時,擷取至關重要完整的URL 以確保準確性。然而,此任務可能會帶來挑戰,特別是在處理移動到新資料夾位置的 WordPress 安裝時。 遇到的一個挑戰是 $_SERVER["REQUEST...
    程式設計 發佈於2024-11-08
  • 如何透過 Matplotlib 的物件導向方法使用 Seaborn 視覺化?
    如何透過 Matplotlib 的物件導向方法使用 Seaborn 視覺化?
    以物件導向的風格使用Seaborn 進行繪圖視覺化Seaborn 是一個廣泛使用的用於資料視覺化的Python 包,它利用Matplotlib 函式庫。透過提供物件導向的接口,Matplotlib 有助於複雜繪圖的建立和管理。本文討論如何利用seaborn的功能,同時維持Matplotlib的物件導...
    程式設計 發佈於2024-11-08
  • 如何使用字串插值將 CSS 屬性設定為 SASS 中的 mixin 值?
    如何使用字串插值將 CSS 屬性設定為 SASS 中的 mixin 值?
    將 SASS Mixin 值設為 CSS 屬性建立通用邊距/填入 mixin 時,可能需要將 CSS 屬性設為 mixin 值。為此,需要使用字串插值。 CSS 屬性的字串插值要使用變數作為 CSS 屬性名稱,需要字串插值 (#{$var})。 範例下面的 mixin 示範如何使用字串設定 CSS ...
    程式設計 發佈於2024-11-08
  • 如何解決 Webpack 和 Babel 的「You May Need an Appropriate Loader」錯誤?
    如何解決 Webpack 和 Babel 的「You May Need an Appropriate Loader」錯誤?
    解決Webpack 和Babel 的“您可能需要合適的加載器”錯誤遇到此錯誤意味著Webpack 需要合適的加載器來解釋文件。在這個特定實例中,Babel 將用於 ES6 編譯。若要解決此問題,請依照下列步驟操作:安裝ES2015 預設:npm install babel-preset-es2015...
    程式設計 發佈於2024-11-08
  • 執行上下文和呼叫堆疊
    執行上下文和呼叫堆疊
    为顶级代码创建全局执行上下文,即不在任何 fn 内的代码。因此,首先执行 fn 之外的代码。 fn-decln/exprsn 的 fn 主体内的代码仅在调用时执行。 执行上下文(EC) JS执行的环境。 存储一些要执行的代码的所有必要信息,例如局部变量、传递给 fn 的 args。 ...
    程式設計 發佈於2024-11-08
  • 是否有必要將字串傳遞給 setTimeout?
    是否有必要將字串傳遞給 setTimeout?
    向setTimeout 傳遞字串:一個必要性問題由於效能問題、潛在的安全風險及其不建議使用,許多開發人員不贊成向setTimeout 傳遞字串的做法地位。然而,在極少數情況下,這種語法可能是有益的。 棄用論點setTimeout 和 setInterval 的傳統語法涉及傳遞一個表示要執行的程式碼的...
    程式設計 發佈於2024-11-08
  • Hours是一個環境變量,我將使用ENV。冷靜冷靜,我先告訴你一件事
    Hours是一個環境變量,我將使用ENV。冷靜冷靜,我先告訴你一件事
    我們總是很匆忙,想要盡快開發,我們經常會採用舊習慣並構建舊軟體,我們可以改進的一個項目是這個叫做環境的小東西,讓我們進一步了解一下。 首先,我想在這裡展示 Laravel 配置概念的重點,我不會擔心其餘的模式,例如資源或其他類似的模式。 1 - 讓我們尋求知識! 不久前,我聽說我無法在我的瘋...
    程式設計 發佈於2024-11-08
  • 要記住的 useState:將變數儲存在 React 的記憶體中!
    要記住的 useState:將變數儲存在 React 的記憶體中!
    在 React 的世界中,管理元件的狀態對於建立動態和互動式應用程式至關重要。最強大的工具之一是 useState 鉤子。 在 React 世界中,狀態管理是創建互動式和動態應用程式的基石之一。 useState 是 React 中最常用的鉤子之一,是管理元件狀態的有效方法。在本文中,我們將研究 ...
    程式設計 發佈於2024-11-08
  • 實現訂單處理系統:部分分散式追蹤和日誌記錄
    實現訂單處理系統:部分分散式追蹤和日誌記錄
    1. Introduction and Goals Welcome to the fifth installment of our series on implementing a sophisticated order processing system! In our prev...
    程式設計 發佈於2024-11-08
  • 如何在不同瀏覽器中準確測量調整大小後的圖片的原始尺寸?
    如何在不同瀏覽器中準確測量調整大小後的圖片的原始尺寸?
    跨瀏覽器揭示客戶端調整大小圖像的原始尺寸確定已在客戶端調整大小的圖像的真實尺寸side 是許多Web 開發場景的關鍵任務。無論您是調整影像以實現響應式佈局,還是向使用者顯示原始尺寸,找到一個跨瀏覽器一致工作的可靠解決方案至關重要。 選項 1:釋放 OffsetWidth 和 OffsetHeight...
    程式設計 發佈於2024-11-08
  • Python什麼時候會遇到「FileNotFoundError: No Such File or Directory」?
    Python什麼時候會遇到「FileNotFoundError: No Such File or Directory」?
    FileNotFoundError 疑難排解:沒有這樣的檔案或目錄 嘗試開啟檔案時,您可能會遇到「FileNotFoundError:[Errno 2&]嘗試開啟檔案時,您可能會遇到「FileNotFoundError:[Errno 2&]嘗試開啟檔案時,您可能會遇到「FileNotFoundErr...
    程式設計 發佈於2024-11-08
  • 如何透過限制使用者對其自己創建的內容的存取來保護 MySQL 資料庫?
    如何透過限制使用者對其自己創建的內容的存取來保護 MySQL 資料庫?
    透過限制對使用者建立的資料庫的存取來保護MySQL 資料庫在多用戶MySQL 設定中,確保資料安全至關重要。一個常見的挑戰是允許使用者建立資料庫,同時限制他們只能存取自己創建的資料庫。 為了解決此問題,MySQL 提供了一種使用通配符資料庫名稱的細緻方法。解決方案不是授予特定資料庫的權限,而是授予具...
    程式設計 發佈於2024-11-08
  • Alura 的免費 HTML 和 CSS 挑戰:建立 Netflix 副本
    Alura 的免費 HTML 和 CSS 挑戰:建立 Netflix 副本
    7 天 HTML 和 CSS 代码是 Alura 为您提供的免费在线练习前端精髓的机会。 在 7 天的时间里,您将面临复制 Netflix 电影和剧集页面布局的挑战,应用从“div”、“section”等基本概念、CSS 中的图像内联和测量到更高级技术的所有内容例如 Flexbox 和 Grid。 ...
    程式設計 發佈於2024-11-08
  • 讓您在 4 年內成為更快的 AI 工程師的工具
    讓您在 4 年內成為更快的 AI 工程師的工具
    在当今科技和创新驱动的世界,对人工智能工程师的需求很高。根据 BlueTree 的统计数据,到 2030 年,人工智能行业预计将增长近 20 倍。这种飙升的需求伴随着对更多人工智能工程师的需求。 在本文中,我们将探讨可以让您在执行 AI 工程任务时脱颖而出的 6 种顶级工具,以及它们如何帮助您更快地...
    程式設計 發佈於2024-11-08
  • 如何從 Golang 程式設定 ulimit -n 而不影響全域限制?
    如何從 Golang 程式設定 ulimit -n 而不影響全域限制?
    從Golang 程式設定ulimit -nQ: 如何從Golang 程式中設定ulimit -n 以將其限制在A:要從Golang 程式設定ulimit -n,可以使用下列步驟:package main import ( "fmt" "syscall&q...
    程式設計 發佈於2024-11-08

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

Copyright© 2022 湘ICP备2022001581号-3