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

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

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

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]刪除
最新教學 更多>
  • 如何實時捕獲和流媒體以進行聊天機器人命令執行?
    如何實時捕獲和流媒體以進行聊天機器人命令執行?
    在開發能夠執行命令的chatbots的領域中,實時從命令執行實時捕獲Stdout,一個常見的需求是能夠檢索和顯示標準輸出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    程式設計 發佈於2025-07-15
  • 在PHP中如何高效檢測空數組?
    在PHP中如何高效檢測空數組?
    在PHP 中檢查一個空數組可以通過各種方法在PHP中確定一個空數組。如果需要驗證任何數組元素的存在,則PHP的鬆散鍵入允許對數組本身進行直接評估:一種更嚴格的方法涉及使用count()函數: if(count(count($ playerList)=== 0){ //列表為空。 } 對...
    程式設計 發佈於2025-07-15
  • Java中如何使用觀察者模式實現自定義事件?
    Java中如何使用觀察者模式實現自定義事件?
    在Java 中創建自定義事件的自定義事件在許多編程場景中都是無關緊要的,使組件能夠基於特定的觸發器相互通信。本文旨在解決以下內容:問題語句我們如何在Java中實現自定義事件以促進基於特定事件的對象之間的交互,定義了管理訂閱者的類界面。 以下代碼片段演示瞭如何使用觀察者模式創建自定義事件: args...
    程式設計 發佈於2025-07-15
  • 如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    如何將MySQL數據庫添加到Visual Studio 2012中的數據源對話框中?
    在Visual Studio 2012 儘管已安裝了MySQL Connector v.6.5.4,但無法將MySQL數據庫添加到實體框架的“ DataSource對話框”中。為了解決這一問題,至關重要的是要了解MySQL連接器v.6.5.5及以後的6.6.x版本將提供MySQL的官方Visual...
    程式設計 發佈於2025-07-15
  • 如何有效地轉換PHP中的時區?
    如何有效地轉換PHP中的時區?
    在PHP 利用dateTime對象和functions DateTime對象及其相應的功能別名為時區轉換提供方便的方法。例如: //定義用戶的時區 date_default_timezone_set('歐洲/倫敦'); //創建DateTime對象 $ dateTime = ne...
    程式設計 發佈於2025-07-15
  • JavaScript計算兩個日期之間天數的方法
    JavaScript計算兩個日期之間天數的方法
    How to Calculate the Difference Between Dates in JavascriptAs you attempt to determine the difference between two dates in Javascript, consider this s...
    程式設計 發佈於2025-07-15
  • 為什麼使用Firefox後退按鈕時JavaScript執行停止?
    為什麼使用Firefox後退按鈕時JavaScript執行停止?
    導航歷史記錄問題:JavaScript使用Firefox Back Back 此行為是由瀏覽器緩存JavaScript資源引起的。要解決此問題並確保在後續頁面訪問中執行腳本,Firefox用戶應設置一個空功能。 警報'); }; alert('inline Alert')...
    程式設計 發佈於2025-07-15
  • 如何處理PHP文件系統功能中的UTF-8文件名?
    如何處理PHP文件系統功能中的UTF-8文件名?
    在PHP的Filesystem functions中處理UTF-8 FileNames 在使用PHP的MKDIR函數中含有UTF-8字符的文件很多flusf-8字符時,您可能會在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    程式設計 發佈於2025-07-15
  • 使用jQuery如何有效修改":after"偽元素的CSS屬性?
    使用jQuery如何有效修改":after"偽元素的CSS屬性?
    在jquery中了解偽元素的限制:訪問“ selector 嘗試修改“:”選擇器的CSS屬性時,您可能會遇到困難。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    程式設計 發佈於2025-07-15
  • 為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    為什麼在我的Linux服務器上安裝Archive_Zip後,我找不到“ class \” class \'ziparchive \'錯誤?
    class'ziparchive'在Linux Server上安裝Archive_zip時找不到錯誤 commant in lin ins in cland ins in lin.11 on a lin.1 in a lin.11錯誤:致命錯誤:在... cass中找不到類z...
    程式設計 發佈於2025-07-15
  • Java中Lambda表達式為何需要“final”或“有效final”變量?
    Java中Lambda表達式為何需要“final”或“有效final”變量?
    Lambda Expressions Require "Final" or "Effectively Final" VariablesThe error message "Variable used in lambda expression shou...
    程式設計 發佈於2025-07-15
  • PHP陣列鍵值異常:了解07和08的好奇情況
    PHP陣列鍵值異常:了解07和08的好奇情況
    PHP數組鍵值問題,使用07&08 在給定數月的數組中,鍵值07和08呈現令人困惑的行為時,就會出現一個不尋常的問題。運行print_r($月份)返回意外結果:鍵“ 07”丟失,而鍵“ 08”分配給了9月的值。 此問題源於PHP對領先零的解釋。當一個數字帶有0(例如07或08)的前綴時,PHP...
    程式設計 發佈於2025-07-15
  • 在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在細胞編輯後,如何維護自定義的JTable細胞渲染?
    在JTable中維護jtable單元格渲染後,在JTable中,在JTable中實現自定義單元格渲染和編輯功能可以增強用戶體驗。但是,至關重要的是要確保即使在編輯操作後也保留所需的格式。 在設置用於格式化“價格”列的“價格”列,用戶遇到的數字格式丟失的“價格”列的“價格”之後,問題在設置自定義單元...
    程式設計 發佈於2025-07-15
  • Go語言如何動態發現導出包類型?
    Go語言如何動態發現導出包類型?
    與反射軟件包中的有限類型的發現能力相反,本文探討了在運行時發現所有包裝類型(尤其是struntime go import( “ FMT” “去/進口商” ) func main(){ pkg,err:= incorter.default()。導入(“ time”) ...
    程式設計 發佈於2025-07-15
  • 如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    為有效的slug生成首先,該函數用指定的分隔符替換所有非字母或數字字符。此步驟可確保slug遵守URL慣例。隨後,它採用ICONV函數將文本簡化為us-ascii兼容格式,從而允許更廣泛的字符集合兼容性。 接下來,該函數使用正則表達式刪除了不需要的字符,例如特殊字符和空格。此步驟可確保slug僅包...
    程式設計 發佈於2025-07-15

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

Copyright© 2022 湘ICP备2022001581号-3