vue - Vue腳手架/TodoList案例

来源:https://www.cnblogs.com/heymar/archive/2022/05/06/16240543.html
-Advertisement-
Play Games

今天做了一個案例,可以好好做做能夠將之前的內容結合起來,最主要的是能對組件化編碼流程有一個大概的清晰認知,這一套做下來,明天自己再做一遍複習一下,其實組件化流程倒是基本上沒什麼問題了,主要是很多vue的方法需要多熟悉一下,畢竟打破了之前的一些對於傳統js的認知,還需要多熟悉一下。 這兩天可能內容不是 ...


今天做了一個案例,可以好好做做能夠將之前的內容結合起來,最主要的是能對組件化編碼流程有一個大概的清晰認知,這一套做下來,明天自己再做一遍複習一下,其實組件化流程倒是基本上沒什麼問題了,主要是很多vue的方法需要多熟悉一下,畢竟打破了之前的一些對於傳統js的認知,還需要多熟悉一下。
這兩天可能內容不是很多,因為有點感冒了,狀態不是很好,不想學多了怕接受的是不是很好。

六.TODOList案例

做這個案例主要是為了能夠熟悉組件化編碼流程,剛開始學做一個項目最好按照以下三個步驟來

1.實現靜態組件

先把一個項目抽取組件,使用組件實現靜態頁面

image-20220506140243988

比如這個案例App的子組件就可以拆分為三個上面輸入框,中間列表展示,下麵總結欄,其實組件的劃分就是按照他的功能點來劃分的,

比如子組件按照功能劃分了三個組件,list里每一個item是不是有自己的功能可以勾選,可以刪除,所以又可以進一步細分組件(如果你拆完一個組件發現很難起名字,說明你拆的不是很合理

  • 既然已經拆分好組件了,就可以去vue項目裡面寫我們的組件了,創建、導入、註冊三步曲完成

image-20220506142134256

  • 接下來應該有我們的靜態模板了,是這樣的,一般情況下我們的一個項目大多數已經完成了一些了,所以不會從零開始,這個時候老闆派給你個任務叫你把這個實現組件化開發,你就直接把html先一股腦的塞到 App.vue裡面,可以啟動伺服器看到整體的一個效果,然後再去一步一步把代碼拆分進我們的組件裡面去

    註意:有很多問題是語法報錯,將那個lintonsave關閉即可

image-20220506144038677

  • 然後就可以開始拆分了,其他不說這個list裡面每一條數據看出了拆分組件的重要性,我直接在list組件復用item就可以了

    image-20220506145018401

  • css拆分時要註意:base等公共樣式放在App.vue,其他各自的樣式各回各家但是要註意添加scoped

2.展示動態數據

將我們項目中需要動態真實的數據存起來 一般是數組加對象的的形式,一個對象一條數據裡面有id、name等等

那麼數據一般保存在哪裡? 回顧一下之前props的案例,我們的數據是不是寫在父組件裡面的,通過子組件標簽傳給了他,子組件才能用props來接受外部傳來的數據,所以我們的數據要定義在每條數據這個組件的父組件

image-20220506153039593

在我們定義數據這裡幾個註意點:

  • id為什麼用字元串,因為數值型會有上限,字元串沒有
  • 既然數據都有了,所以這裡就不用一個一個去寫子組件標簽了直接v-for列表渲染
  • 最關鍵的:我們要將數據傳到子組件裡面去吧,這裡不再是像以前那樣,一個一個傳,這裡直接是傳的一個對象,而且還是遍歷出來的每一條對象,還必須要動態綁定,不動態綁定這裡就是一個字元串

子組件這邊,註意一下props接受參數要用引號包裹,然後就是怎麼來讓我們的覆選框動態的獲取到有沒有勾選,讓其動態綁定值為我們數據裡面的值即可

image-20220506154038646

3.添加

首先我們實現回車添加數據的邏輯,肯定是要生成一個對象然後添加進那個數組裡面,這裡的id由於滅有資料庫支持,就採用了一個包,uuid可以生成全球唯一id,但是他體積表較大,這裡用的是另一個體積小一點的 nanoid

image-20220506161858206

接下來問題就來了,我們這個數據是在header裡面添加的,而我們的數據是在list,我們學過父組件給子組件傳數據(props),但是沒有學過兄弟關係來傳數據吧,這裡才去最基礎的方法來實現

image-20220506162115401

我們吧list裡面定義的數據data放到app組件裡面去,然後app通過動態綁定將數據傳到list的組件標簽,這個時候list用props來接受傳過來的值

最主要的是怎麼把子組件header傳到父組件app裡面去:我們在app定義一個函數然後接受形參,將這個函數動態綁定給到header,header通過props就能夠得到這個函數,然後重要的一步 我將這個函數寫在鍵盤事件裡面,同時參數是我們的創建的數據,就相當於調用了這個函數,調用不要緊,關鍵是這個函數式app送給你用的,你調用(送給你用的所以拿過來是存在於vc實例對象上)拿我app不就拿到了這個參數嗎所以,app現在又有參數,又定義了數據,那麼添加的邏輯就開始了

image-20220506164314041

image-20220506164444567

4.勾選

我們要在item裡面來勾選,從而影響到數據裡面的completed這個選項,我們的數據是定義在App裡面的,有一句話叫做 數據在哪裡,那麼處理數據的方法就寫在哪裡,所以這裡好像又要用到子組件給父組件東西了,給什麼?我勾選的狀態實在item里進行的,我必須拿到勾選的這一個id,才能在處理數據的方法裡面以id為參數對數據記性遍歷找到對應的那一個將他的completed的值改為非值

image-20220506172051688

image-20220506172213243

這裡有一個註意點,把我們之前這個勾選的所有邏輯推翻,直接在item的input標簽裡面寫一個v-model,我們說覆選框v-model預設收集的是checked的值,如果我把v-model設置為todo.completed是不是就讓我們的checked動態綁定了,他為true,checked就為true,第一步初始化數據的勾選完成了,這裡還有一個更重要的,你該數據也同樣可以改到data裡面的數據,因為v-model本身就是雙向綁定,但是我們前面也說過,props接收到的數據不能改,這裡很明顯是通過props傳過來的數據改到的,為什麼這裡沒報錯呢,因為vue對於對象改動的檢測有點類似於 const,一般數據確實數據變了就是改動了,但是數組和對象通過屬性名或者下標去改某一個值並不叫改動,要變動整個數組和對象才叫改動,所以這裡沒有報錯,這個方法是簡單但是,官方定義的props傳過來的數據不能改,最好還是不要改,萬一哪天這個數據不是對象里的值了,就麻煩了,最好還是按照語法規則來

image-20220506174549880

5.刪除

主題邏輯剛上面差不多,點擊刪除返回id,app傳過來一個函數接受這個id,然後數組的篩選方法filter讓我們的數據等於篩選出來的新數組,這裡就不考慮性能問題了,假裝是個標記刪除吧,刪除了雖然還在但是也永遠不會給你顯示出來了,所以可以直接把他賦值給這個原數據,還有一個點confirm確認框,會彈出一個對話框內容為你傳進去的參數,配合if來使用可以達到只有你點擊確定了才會執行後面的邏輯

image-20220506180635090

image-20220506180739900

6.底部統計

既然是統計,那肯定要用計算節點來做,這裡用到了數組的reduce方法,要註意的是,prev每次返回要等於他自己

image-20220506183427810

7.底部交互

先完成我們點擊了所有的勾選框,下麵全選會勾上,但凡少勾選一個都不會鉤上的邏輯,其實很簡單,將我們全部的這個數量也弄成一個計算屬性,然後將我們全選動態綁定,且返回值也由計算屬性來決定,直接去比較已完成和全部是否相等

image-20220506190208956

探後就是我們的全選功能,邏輯是這樣,點擊一下,通過e獲取他的checked的值,然後又要動到數據了,需要app裡面對數組做一個迴圈對所有的數據的completed的值都等於這個checked的值

image-20220506191042427

但是這樣有一個bug,當我們刪完後,會是勾選狀態,應該為不勾選並且隱藏掉

image-20220506191130675

在我們剛纔完成點擊點擊上面,下麵全選也會對應去勾選上那裡的邏輯完善一下,因為原來的寫法,就是當已完成和總數一樣的時候就會勾選上,那麼最後刪完了,也是一樣的所以不行

image-20220506191636723

通過v-if添加在footer即可

image-20220506191825518

好了,可以忘掉這一章節實現的功能了,簡便方法他來了

我們這裡的全選框有些啥子東西,一個管初始化讀取數據的,一個改數據的,又是input,讀寫,想到他沒有v-model

image-20220506192144274

我們用v-model去綁定isAll的值也就是判斷有沒有全選的值,即可完成讀的操作,仔細想想是不是

image-20220506192639195

image-20220506192652247

但是這裡改的話會報錯,為什麼?

因為我們的isAll是計算屬性,你改動他的值,你setter都沒有怎麼改,所以這裡要這麼做,定義一個setter,並且把這個值給到我們剛纔定義的迴圈讓所有值都等於這個checked的App組件上的函數

image-20220506193301786

為什麼這裡可以使用v-model前面是因為那個值時props傳過來的值肯定不能改,而這裡是我們寫在這個組件的計算屬性屬於自己的

8.清除已完成的任務

最後一個功能,很簡單直接一個點擊事件,在app這邊做一個數組篩選,篩選的是completed沒被選中的

9.總結

組件化編碼流程

  • 拆分靜態組件,按照功能拆分
  • 實現動態組件,考慮好數據的位置,如果數據是一個組件在用就放到這個組件,如果數據是一些組件在用,就放到他們的共同的父組件(這種方法也叫做狀態提升)
  • 實現交互(從綁定事件開始)
  • props不僅適合父給子傳數據,還可以子給父傳數據(父會給子一個函數)
  • v-model註意修改的值是不是props過來的,不是他過來的還是可以用的還是很方便的
  • 修改對象裡面的值跟const一樣改單個值不會被髮現,要修改整個對象

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 實現矩陣鍵盤掃描,當按下任意一個按鈕時,數位管立即顯示當前按下按鈕對應鍵值。 硬體設計 在第一節的基礎上,在Pr ...
  • 文章作者:阿裡零售通演算法團隊 出品社區:DataFun 導讀: 零售通作為阿裡巴巴新零售的八路大軍之一,肩負著“共建智能分銷平臺”和“讓百萬小店擁抱DT時代”的重要使命。一方面,我們通過線上平臺(零售通APP)將零售品牌商的貨品展現給小店的店主,並提供交易渠道讓店主進行批發進貨;另一方面,我們通過天 ...
  • 環境準備 客戶端 Windows 10 ArcCatalog 10.8.1 精簡版Oracle Client 12 - 32 bit 安裝包名稱:instantclient-basic-nt-12.1.0.2.0.zip Navicat Premium 15 服務端 Windows Server 2 ...
  • 線上服務的MongoDB中有一個很大的表,我查詢時使用了sort()根據某個欄位進行排序,結果報了下麵這個錯誤: [Error] Executor error during find command :: caused by :: Sort operation used more than the ...
  • 基於 OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)源碼寫點內容,幫助大家瞭解下協議開發領域,儘可能將 3gpp 協議內容與 OpenHarmony 電話子系統模塊進行結合講解。 ...
  • 變聲是直播類、聊天類應用中用戶經常使用的功能。例如:很多主播選擇使用變聲器來實現帶動直播間氣氛;和朋友語音聊天時選擇變成蘿莉音讓聊天更有趣。HMS Core音頻編輯服務提供變聲能力,幫助開發者在應用中構建變聲功能。用戶可以通過預置的變聲風格進行變聲,提升音頻可玩性的同時有效保護用戶隱私,讓你隨心所欲 ...
  • 技術大咖們從開源實戰項目總結經驗,利用真實場景的應用案例分享前沿技術,引導開發者從零參與 OpenHarmony 開源貢獻,提升代碼效率,培養開發者成為開源社區的貢獻者。 ...
  • 1. 準備階段 關於該功能的實現我們需要學習以下的資料: 1.1 【ARKUI】ets怎麼實現文件操作 1.2 文件管理 1.3 Ability上下文 2. demo 實現 2.1 文件路徑讀取 參考 context.getFilesDir 來進行獲取文件路徑,代碼如下 private getCac ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...