【Vue】 實現TodoList案例(待辦事項)

目錄

組件化編碼流程(通用)

1.實現靜態組件:抽取組件,使用組件實現靜態頁面效果

2.展示動態數據:

1. 常規 HTML 屬性

3.交互——從綁定事件監聽開始

什么時候要用 event:

什么時候不需要用 event:

總結TodoList案例

總結不易!本章節對我有很大的收獲, 希望對你也有幫助!!!


本節文件素材自取:https://gitee.com/liu-yihao-hhh/i-love---vue/tree/master/vue-06/src

組件化編碼流程(通用)

1.實現靜態組件:抽取組件,使用組件實現靜態頁面效果

第一步,進行拆分組件!
首先定義好各個組件的名稱,然后分別進行引入和注冊
App組件
Item組件屬于List的子組件,單獨進行引入和注冊
這里有當前模塊化的html和css直接進行引入, 然后通過 自己拆分,來分別引入組件即可!
現在就定義好了一個靜態的組件!

2.展示動態數據:

  • 數據的類型、名稱是什么?
  • 數據保存在哪個組件?
在MyList中存在一堆待處理的事情的時候,我們肯定就是用數組對象來進行存儲,每一個都具有當前標簽的id號,內容title和是否完成done
進行渲染的時候,可以用我們之前學到的v-for = " todoObj in todos" 注意綁定:key=“todoObj.id”值
實際上是寫成 v-for = "(title, index) in todos"

傳入值給MyItem 進行值的接收~ 打印這里的生命周期鉤子中todo對象

v-bind就是得到Vue里面的值 然后進行傳給html標簽里面的屬性值使用!

1. 常規 HTML 屬性

  • href: 鏈接的 URL

  • src: 圖像、視頻或其他資源的來源

  • alt: 圖像的替代文本

  • title: 元素的提示信息

  • disabled: 控制按鈕、輸入框等元素的禁用狀態

  • readonly: 使輸入框成為只讀

  • checked: 復選框或單選框的選中狀態

  • value: 表單控件的值

  • placeholder: 表單控件的占位符文本

  • maxlength: 輸入框允許的最大字符數

  • type: 表單控件的類型,如 textpasswordcheckbox

就好比 給img :src=“”圖片傳入地址

    3.交互——從綁定事件監聽開始

    在MyHeader.vue中,進行事件添加, 每次按下回車,都會添加一條新的todo任務

    • @keyupv-on:keyup 的簡寫,它用于監聽 keyup 事件。keyup 事件會在用戶松開按鍵時觸發。

    • .enter 是一個修飾符,它限制只在用戶按下 Enter 鍵 時觸發事件。也就是說,只有當用戶按下 Enter 鍵并松開時,才會觸發 add 方法。

    • add 是你在 Vue 組件中定義的方法,當這個事件觸發時,Vue 會調用 add 方法。

    這里有兩種辦法來接受輸入框的數據:

    1. 給這個add函數來進行添加

    • event 是觸發 keyup 事件時,瀏覽器傳遞給事件處理函數的原生 DOM 事件對象。

    • event.target 是觸發事件的元素(即 <input> 輸入框)。

    • event.target.value 獲取的是這個輸入框的當前值,也就是用戶輸入的內容。

    什么時候要用 event

    1. 你需要獲取觸發事件的元素(比如按鈕、輸入框等): 比如你點擊了一個按鈕,想知道是哪個按鈕觸發了事件,或者想獲取這個按鈕的某個屬性(比如按鈕的文本、值等)。這時需要 event.target 來拿到這個元素。

    <button @click="handleClick">Click me</button>methods: {handleClick(event) {console.log(event.target); // 這里你就可以得到觸發點擊的那個按鈕元素}
    }
    

    你需要獲取更多的事件信息: 比如你按了某個鍵,想知道是哪個鍵被按下。你需要 event.key 來獲取按下的鍵的名字(例如 "Enter""Escape" 等)。

    <input type="text" @keyup="handleKeyup">methods: {handleKeyup(event) {console.log(event.key); // 輸出你按下的鍵名}
    }
    

    你需要阻止事件的默認行為: 比如你點擊了一個提交按鈕,但你不想讓它立即提交表單,而是執行其他的操作。你可以使用 event.preventDefault() 來阻止表單的提交。

    <form @submit="handleSubmit"><button type="submit">Submit</button>
    </form>methods: {handleSubmit(event) {event.preventDefault(); // 阻止表單提交console.log("表單沒有提交");}
    }
    

    你需要停止事件冒泡: 有時候你點擊某個元素時,可能不希望事件傳播到父元素(例如,你點擊了按鈕,但父元素的點擊事件也不想被觸發)。這時你可以使用 event.stopPropagation() 來停止事件的傳播。

    <div @click="handleDivClick"><button @click="handleClick">Click me</button>
    </div>methods: {handleDivClick() {console.log("Div clicked");},handleClick(event) {event.stopPropagation(); // 阻止事件冒泡,不讓父 div 的點擊事件觸發console.log("Button clicked");}
    }
    

    什么時候不需要event

    • 如果你不需要獲取事件的具體信息(比如你只是希望某個方法被執行),就不需要用 event。比如你用 Vue 的 @click,然后直接調用一個方法,沒有涉及到原生事件信息的處理時,就不需要傳 event

    2. 采用v-modle進行雙向數據綁定,來直接獲取輸入的title值

    v-model="title":實現了輸入框的值與 title 數據的雙向綁定。

    為了生成一個絕對不會重復的id號, 這里就推薦一個nanoid庫進行生成唯一的id

    安裝好nanoid庫后,直接進行引入:然后打印出輸入的對象看看效果!

    由于我們現在數據在MyHeader上 需要將數據傳入到MyList內才能將數據進行渲染,但是我們現在實現不了兄弟組件之間的互傳,就比如上面之前的List組件傳至item組件, 它們之間的關系就是父子組件的關系, List引入了item組件,所以才可以通過props進行傳輸數據!

    這里我們只能先將header數據傳入App 然后 才從App傳入至List的方法可行!!!

    1. 先實現比較簡單的這條線,將數據從App組件傳向List就是用props即可,將todos數組放入App組件,進行傳輸:

    App組件:

    List獲取App組件傳來的todos 然后再傳給item單個事件進行渲染:

    2.第二條線就是, 要將Header輸入框的值傳送給App組件!

    然后就只需要將receive名字換成addTodo 并且獲得的todoObj進行unshift數組todos即可!

    Header組件進行數據檢驗!

    if(!event.target.value.trim()) return alert('輸入不能為空')

    export default {name: 'MyHeader',props:['addTodo'],methods: {add(event) {// 檢驗數據if(!event.target.value.trim()) return alert('輸入不能為空')// 將用戶的輸入包裝成一個todo對象// console.log(event.target.value)const todoObj = {id:nanoid(), title: event.target.value, done:false}// console.log(todoObj)// 通知App組件添加一個todoObj對象this.addTodo(todoObj)event.target.value = ''}}
    }

    當我想要改變當前標簽值的done時, 首先第一步就是要獲得該事件的id號!再Item組件中~

    那么仍然再App組件內進行定義函數:來進行勾選或取消勾選當前事件,得到該id后 將當前事件的done進行反轉!

    那么就要將該函數進行傳遞至item組件內, 就要進行連續傳遞兩次

    item勾選or取消勾選的另一種方法!直接利用v-model的雙向數據綁定, 來獲取props傳來的數組todo.done來控制當前的checkbox的勾選效果!

    但是這里有一個很明顯的沖突:

    這里的todo.done 是props傳進來的 是只讀的 但是這里卻被修改了

    1. ? ? ?但是Vue的監測比較寬松,比如:let obj = {a: 1, b: 2}
    2. ? ? ?obj.a = 666 這種只修改屬性值, Vue是監測不到的
    3. ? ? ?obj = {x: 100, y: 200} 這種修改整個對象 才是Vue能夠監測到的

    所以強烈不建議這種寫法,還是不要直接對props進行修改的好~

    定義刪除item任務, 跟勾選是用養一個效果, 再App組件內進行創建deleteTodo函數 然后進行傳遞給item組件中!

    Footer計算任務:

    Footer組件要接收App傳入的todos 然后來計算當前的全部任務和已完成任務數!

    <span>已完成{{ doneTotal }}</span> / 全部{{ todos.length }}
    export default {name:'MyFooter',props:['todos'],// 計算屬性 因為我們要計算已完成的任務數computed: {// 簡寫 寫成函數形式doneTotal() {// 寫法不高級// let i = 0// this.todos.forEach(todo => {if(todo.done) i++})// return i// 第一個參數就是一個函數 第二個參數 用來做統計的初始值 就像是定義 i = 0// 數組的長度是幾 這個函數就被調用幾次// pre 就是上一次的值, current就是當前的值// 返回值就是下一次執行這個函數的pre來進行接收// 最后一次調用函數的返回值就是整個reduce方法的返回值// current就是每一個todo對象 就是數組里面的下標為pre當前內容// const x = this.todos.reduce((pre, current) => {//   return pre + (current.done ? 1 : 0)// }, 0)// return xreturn this.todos.reduce((pre, todo) => pre + (todo.done ? 1 : 0), 0)}}
    }
    

    計算已完成任務數,這里用到了reduce這個數組內置函數,用來進行篩選計算作用,那么就要放入計算函數內部進行返回!

    reduce()?方法對數組中的每個元素按序執行一個提供的?reducer?函數,每一次運行?reducer?會將先前元素的計算結果作為參數傳入,最后將其結果匯總為單個返回值。

    全部勾選 or 全部不勾選按鈕 以及 清除已經完成的任務

    Footer的input checkbox復選框:

    但是這里input 又采用:checkbox 進行獲取isAll的值 還進行@click進行點擊事件 所以二者可以進行合并為v-model= "isAll"

    正常流程是: get() → 用戶修改 → set(value) → 響應式數據變了 → 自動觸發 get() → 頁面刷新

    清除已完成任務:

    ?本節文件素材自取:https://gitee.com/liu-yihao-hhh/i-love---vue/tree/master/vue-06/src

    總結TodoList案例

    1. 組件化編碼流程:

      ? (1).拆分靜態組件:組件要按照功能點拆分,命名不要與html元素沖突。

      ? (2).實現動態組件:考慮好數據的存放位置,數據是一個組件在用,還是一些組件在用:

      ? 1).一個組件在用:放在組件自身即可。

      ? 2). 一些組件在用:放在他們共同的父組件上(<span style="color:red">狀態提升</span>)。

      ? (3).實現交互:從綁定事件開始。

    2. props適用于:

      ? (1).父組件 ==> 子組件 通信

      ? (2).子組件 ==> 父組件 通信(要求父先給子一個函數)

    1. 使用v-model時要切記:v-model綁定的值不能是props傳過來的值,因為props是不可以修改的!

    2. props傳過來的若是對象類型的值,修改對象中的屬性時Vue不會報錯,但不推薦這樣做。

    總結不易!本章節對我有很大的收獲, 希望對你也有幫助!!!

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/news/904295.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/news/904295.shtml
    英文地址,請注明出處:http://en.pswp.cn/news/904295.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    【Bootstrap V4系列】學習入門教程之 組件-卡片(Card)

    Bootstrap V4系列 學習入門教程之 組件-卡片&#xff08;Card&#xff09; 卡片&#xff08;Card&#xff09;一、Example二、Content types 內容類型2.1 Body 主體2.2 Titles, text, and links 標題、文本和鏈接2.3 Images 圖片2.4 List groups 列表組2.5 Kitchen sink 洗滌槽…

    java學習之數據結構:四、樹(代碼補充)

    這部分主要是用代碼實現有序二叉樹、樹遍歷、刪除節點 目錄 1.構建有序二叉樹 1.1原理 1.2插入實現 2.廣度優先遍歷--隊列實現 3.深度優先遍歷--遞歸實現 3.1先序遍歷 3.2中序遍歷 3.3后序遍歷 4.刪除 4.1刪除葉子節點 4.2刪除有一棵子樹的節點 4.3刪除有兩棵子樹的節…

    架構進階:什么是數據架構,如何理解數據架構?(華為)

    數據架構是企業架構的重要組成部分,DAMA、IBM 及國內大廠對其定義各有側重。它包含數據資產目錄、數據標準、數據模型和數據分布四個組件。數據資產目錄可梳理企業數據資產,數據標準統一數據含義和規則,數據模型反映業務對象關聯關系,數據分布呈現數據流動情況。數據架構是…

    Unity SpriteEditor(精靈圖片編輯器)

    &#x1f3c6; 個人愚見&#xff0c;沒事寫寫筆記 &#x1f3c6;《博客內容》&#xff1a;Unity3D開發內容 &#x1f3c6;&#x1f389;歡迎 &#x1f44d;點贊?評論?收藏 &#x1f50e;SpriteEditor&#xff1a; 精靈圖片編輯器 &#x1f4cc;用于編輯2D游戲開發中使用的Sp…

    【網絡原理】從零開始深入理解HTTP的報文格式(一)

    本篇博客給大家帶來的是網絡HTTP協議的知識點, 重點介紹HTTP的報文格式. &#x1f40e;文章專欄: JavaEE初階 &#x1f680;若有問題 評論區見 ? 歡迎大家點贊 評論 收藏 分享 如果你不知道分享給誰,那就分享給薯條. 你們的支持是我不斷創作的動力 . 王子,公主請閱&#x1f68…

    ElasticSearch深入解析(九):Object、Nested、Flattened類型

    文章目錄 一、Object 類型&#xff1a;默認的嵌套對象處理方式核心原理典型場景關鍵限制 二、Nested 類型&#xff1a;解決嵌套數組的關聯查詢核心原理典型場景使用示例注意事項 三、Join 類型&#xff1a;跨文檔的父子關聯核心原理典型場景使用示例注意事項 四、Flattened 類型…

    36、C#中的?法聲明參數關鍵字params,ref,out的意義及?法

    在C#中&#xff0c;params、ref 和 out 是方法聲明中用于修飾參數的關鍵字&#xff0c;它們各自有不同的用途和語義。以下是它們的詳細說明和用法&#xff1a; 1、 params 關鍵字 意義 params 允許方法接受可變數量的參數&#xff0c;這些參數會被編譯為一個數組。適用于參數…

    【大模型實戰篇】華為信創環境采用vllm部署QwQ-32B模型

    1. 背景 本文分享在華為昇騰機器上部署QwQ-32B模型的實踐。 首先華為自己是提供了一套在信創機器&#xff08;NPU&#xff09;上部署模型的方案【1】&#xff0c;但是部署之后&#xff0c;測試發現會有輸出截斷的現象。QwQ-32B本身是支持128k的最大上下文長度&#xff0c;定位…

    前端面經-VUE3篇(二)--vue3基礎知識(二)計算屬性(computed)、監聽屬性(Watch)

    一、計算屬性(computed) 計算屬性&#xff08;Computed Properties&#xff09;是 Vue 中一種特殊的響應式數據&#xff0c;它能基于已有的響應式數據動態計算出新的數據。 計算屬性有以下特性&#xff1a; 自動緩存&#xff1a;只有當它依賴的響應式數據發生變化時&#xff…

    [預備知識] 5. 優化理論(一)

    優化理論 梯度下降&#xff08;Gradient Descent&#xff09; 數學原理與可視化 梯度下降是優化領域的基石算法&#xff0c;其核心思想是沿負梯度方向迭代更新參數。數學表達式為&#xff1a; θ t 1 θ t ? α ? θ J ( θ t ) \theta_{t1} \theta_t - \alpha \nabla…

    大模型微調Fine-tuning:從概念到實踐的全面解析

    目錄 引言 一、什么是大模型微調&#xff1f; 1.1 預訓練與微調的區別 1.2 微調的技術演進 二、為什么需要微調&#xff1f; 2.1 解決大模型的固有局限 2.2 微調的優勢 三、主流微調方法 3.1 全參數微調 3.2 參數高效微調&#xff08;PEFT&#xff09; 四、微調實踐指…

    Docker 使用下 (二)

    Docker 使用下 &#xff08;二&#xff09; 文章目錄 Docker 使用下 &#xff08;二&#xff09;前言一、初識Docker1.1 、Docker概述1.2 、Docker的歷史1.3 、Docker解決了什么問題1.4 、Docker 的優點1.5 、Docker的架構圖 二、鏡像三、容器四、數據卷4.1、數據卷的概念4.2 、…

    洛谷P12238 [藍橋杯 2023 國 Java A] 單詞分類

    [Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] Copy from luogu. [Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis] 既然都是字符串前綴的問題了&#xff0c;那當然首先就應該想到 Trie \text{Trie} Trie 樹。 我們可…

    pta作業中有啟發性的程序題

    1 【知識點】&#xff1a;多態 函數接口定義&#xff1a; 以Student為基類&#xff0c;構建GroupA, GroupB和GroupC三個類 裁判測試程序樣例&#xff1a; #include<iostream> #include <string> using namespace std;/* 請在這里填寫答案 */int main() {const …

    Scrapy框架之CrawlSpider爬蟲 實戰 詳解

    CrawlSpider 是 Scrapy 框架中一個非常實用的爬蟲基類&#xff0c;它繼承自 Spider 類&#xff0c;主要用于實現基于規則的網頁爬取。相較于普通的 Spider 類&#xff0c;CrawlSpider 可以根據預定義的規則自動跟進頁面中的鏈接&#xff0c;從而實現更高效、更靈活的爬取。 Scr…

    Glide 如何加載遠程 Base64 圖片

    最近有個需求&#xff0c;后端給出的圖片地址并不是正常的 URL&#xff0c;而且需要一個接口去請求&#xff0c;但是返回的是 base64 數據流。這里不關心為啥要這么多&#xff0c;原因有很多&#xff0c;可能是系統的問題&#xff0c;也可能是能力問題。當然作為我們 Android 程…

    004-nlohmann/json 快速認識-C++開源庫108杰

    了解 nlohmann/json 的特點&#xff1b;理解編程中 “數據戰場”劃分的概念&#xff1b;迅速上手多種方式構建一個JSON對象&#xff1b; 1 特點與安裝 nlohmann/json 是一個在 github 長期霸占 “JSON” 熱搜版第1的CJSON處理庫。它的最大優點是與 C 標準庫的容器數據&#xf…

    #基礎Machine Learning 算法(上)

    機器學習算法的分類 機器學習算法大致可以分為三類&#xff1a; 監督學習算法 (Supervised Algorithms&#xff09;:在監督學習訓練過程中&#xff0c;可以由訓練數據集學到或建立一個模式&#xff08;函數 / learning model&#xff09;&#xff0c;并依此模式推測新的實例。…

    正弦波、方波、三角波和鋸齒波信號發生器——Multisim電路仿真

    目錄 Multisim使用教程說明鏈接 一、正弦波信號發生電路 1.1正弦波發生電路 電路組成 工作原理 振蕩頻率 1.2 正弦波發生電路仿真分析 工程文件鏈接 二、方波信號發生電路 2.1 方波發生電路可調頻率 工作原理 詳細過程 2.2 方波發生電路可調頻率/可調占空比 調節占空比 方波產生…

    【AND-OR-~OR鎖存器設計】2022-8-31

    緣由鎖存器11111111111-硬件開發-CSDN問答 重置1&#xff0c;不論輸入什么&#xff0c;輸出都為0&#xff1b; 重置0&#xff0c;輸入1就鎖住1 此時輸入再次變為0&#xff0c;輸出不變&#xff0c;為鎖住。