Vue 3 30天精進之旅:Day 29 - 項目實戰

在學習了近一個月的Vue 3知識后,今天是我們學習旅程的第29天。在這一天,我們將專注于實踐,通過一個小型項目來鞏固之前的學習成果,并為之后的展示做好準備。

一、項目目標

我們將構建一個簡單的個人博客應用,具備以下基本功能:

  1. 文章列表展示:從偽API獲取文章數據并在頁面上展示。
  2. 文章詳情查看:用戶可以點擊文章標題,查看文章的詳細內容。
  3. 文章創建:允許用戶通過表單創建新文章并添加到文章列表中。
  4. 簡單的路由導航:使用Vue Router實現頁面間的導航。

二、項目準備

在開始我們的小型博客項目之前,確保你已經做好以下準備工作,以便順利進行項目開發。以下是我們需要完成的幾步準備工作:

1. 環境搭建

首先,確保你的開發環境已經搭建好。你需要安裝以下工具和依賴:

  • Node.js:Vue.js依賴Node.js作為運行環境。請確保你安裝了Node.js的LTS(長期支持)版本,可以在Node.js官網下載并安裝。
  • npm或yarn:npm是Node.js自帶的包管理工具,而yarn是一個更快的替代品。無論你選擇哪一個,都可以用來安裝項目依賴。

安裝完成后,可以通過以下命令檢查版本,確保它們已正確安裝:

node -v
npm -v
# 或者,如果你使用yarn
yarn -v

2. 創建Vue項目

接下來,我們將使用Vue CLI快速生成一個新的Vue項目。如果你還沒有安裝Vue CLI,可以通過以下命令全局安裝:

npm install -g @vue/cli
# 或者使用yarn
yarn global add @vue/cli

安裝完成后,使用以下命令創建一個新的項目:

vue create my-blog

在創建過程中,Vue CLI會提示你選擇預設。你可以選擇“Default (Vue 3)”選項,或者根據個人需求手動選擇要安裝的功能(如路由、狀態管理等)。

3. 安裝依賴

創建項目后,進入項目目錄并安裝我們需要的依賴。我們將使用Vue Router處理路由,并使用axios進行HTTP請求。可以通過以下命令安裝它們:

cd my-blog
npm install vue-router axios
# 或者使用yarn
yarn add vue-router axios

4. 理解項目結構

在項目創建完成后,查看項目的文件結構。一個典型的Vue項目結構如下所示:

my-blog/
├── node_modules/      # 項目依賴的第三方庫
├── public/            # 存放靜態文件
│   └── index.html     # 入口HTML文件
├── src/               # 源代碼目錄
│   ├── assets/        # 靜態資源(如圖片、樣式等)
│   ├── components/    # Vue組件
│   ├── views/         # 視圖組件
│   ├── router/        # 路由配置
│   ├── App.vue        # 主應用組件
│   └── main.js        # 項目入口文件
├── .gitignore         # Git忽略文件
├── package.json       # 項目依賴和配置
└── README.md          # 項目的說明文檔
  • src/:這是我們主要的開發目錄,所有的源代碼文件都存放在這里。我們將在此目錄下創建組件和視圖文件。
  • components/:存放可復用的Vue組件。
  • views/:存放頁面級的組件,通常對應路由中的視圖。
  • router/:存放路由配置文件。

了解項目結構后,你會更清晰地知道在哪里添加新功能和組件。

5. 設置基本樣式

雖然我們的項目主要關注功能實現,但基本的樣式也能為用戶提供更好的體驗。你可以選擇使用CSS框架(如Bootstrap、Tailwind CSS等)來加速樣式開發。以下是安裝Bootstrap的步驟:

npm install bootstrap

然后在你的src/main.js中引入Bootstrap樣式:

import 'bootstrap/dist/css/bootstrap.min.css';

現在,你的項目就有了基礎的樣式支持。

6. 了解API

在我們的博客應用中,我們將使用一個偽API來獲取和提交文章數據。可以使用JSONPlaceholder作為模擬的RESTful API。它提供了免費的虛擬數據接口,適合用于開發和測試。

了解API的基本用法后,可以嘗試用Postman等工具測試API,熟悉請求和響應的格式。這將幫助你在項目中更順利地進行數據交互。

7. 規劃項目功能

在開始編碼之前,先明確項目的功能需求和界面布局。這可以通過繪制草圖或使用工具(如Figma、Sketch等)進行原型設計。我們將在項目中實現以下基本功能:

  • 文章列表:展示所有文章的標題和簡短內容,用戶可以點擊查看詳細信息。
  • 文章詳情:展示點擊的文章的完整內容。
  • 創建文章:用戶可以通過表單提交新文章,添加到文章列表中。
  • 路由導航:實現不同頁面間的導航。

明確了功能需求后,你可以開始逐步實現這些功能。

通過上述準備工作,你將為即將到來的項目開發奠定堅實的基礎。接下來,我們將進入實際的編碼階段,開始實現博客應用的具體功能。準備好了嗎?讓我們開始吧!

三、項目結構

創建一個新的Vue項目并按照以下結構組織你的代碼:

src/
├── components/
│   ├── ArticleList.vue
│   ├── ArticleDetail.vue
│   └── ArticleForm.vue
├── views/
│   ├── Home.vue
│   └── ArticleView.vue
├── router/
│   └── index.js
└── App.vue

四、代碼實現

1. 設置路由

src/router/index.js中設置路由:

import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import ArticleView from '../views/ArticleView.vue';const routes = [{ path: '/', component: Home },{ path: '/article/:id', component: ArticleView, props: true },
];const router = createRouter({history: createWebHistory(process.env.BASE_URL),routes,
});export default router;

2. 創建文章列表組件

src/components/ArticleList.vue中實現文章列表展示:

<template><div><h1>文章列表</h1><ul><li v-for="article in articles" :key="article.id"><router-link :to="`/article/${article.id}`">{{ article.title }}</router-link></li></ul><ArticleForm @article-added="fetchArticles" /></div>
</template><script>
import axios from 'axios';
import ArticleForm from './ArticleForm.vue';export default {components: { ArticleForm },data() {return {articles: [],};},methods: {async fetchArticles() {const response = await axios.get('https://jsonplaceholder.typicode.com/posts');this.articles = response.data;},},mounted() {this.fetchArticles();},
};
</script>

3. 創建文章詳情組件

src/components/ArticleDetail.vue中實現文章詳情展示:

<template><div><h1>{{ article.title }}</h1><p>{{ article.body }}</p><router-link to="/">返回文章列表</router-link></div>
</template><script>
import axios from 'axios';export default {props: ['id'],data() {return {article: {},};},async mounted() {const response = await axios.get(`https://jsonplaceholder.typicode.com/posts/${this.id}`);this.article = response.data;},
};
</script>

4. 創建文章創建表單組件

src/components/ArticleForm.vue中實現文章創建表單:

<template><form @submit.prevent="submitForm"><input v-model="title" placeholder="文章標題" required /><textarea v-model="body" placeholder="文章內容" required></textarea><button type="submit">創建文章</button></form>
</template><script>
export default {data() {return {title: '',body: '',};},methods: {submitForm() {const newArticle = {id: Date.now(), // 簡單生成 IDtitle: this.title,body: this.body,};this.$emit('article-added', newArticle); // 向父組件發送事件this.title = '';this.body = '';},},
};
</script>

5. 主視圖

src/views/Home.vue中使用ArticleList組件:

<template><div><ArticleList /></div>
</template><script>
import ArticleList from '../components/ArticleList.vue';export default {components: { ArticleList },
};
</script>

6. 文章視圖

src/views/ArticleView.vue中使用ArticleDetail組件:

<template><div><ArticleDetail :id="id" /></div>
</template><script>
import ArticleDetail from '../components/ArticleDetail.vue';export default {components: { ArticleDetail },props: ['id'],
};
</script>

7. 配置App.vue

確保在src/App.vue中引入并使用router:

<template><router-view />
</template><script>
import { createRouter, createWebHistory } from 'vue-router';
import router from './router';export default {name: 'App',router,
};
</script>

五、總結與展望

通過今天的項目實踐,你應該對Vue 3的組件、路由和API交互有了更深的理解。接下來的最后一天,我們將整合所有的學習內容,準備一個精彩的項目展示。希望你能思考如何進一步優化和擴展這個博客應用,為未來的項目打下基礎。

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

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

相關文章

Windows Docker運行Implicit-SVSDF-Planner

Windows Docker運行GitHub - ZJU-FAST-Lab/Implicit-SVSDF-Planner: [SIGGRAPH 2024 & TOG] 1. 設置環境 我將項目git clone在D:/Github目錄中。 下載ubuntu20.04 noetic鏡像 docker pull osrf/ros:noetic-desktop-full-focal 啟動容器&#xff0c;掛載主機的D:/Github文…

PHP 安全與加密:守護 Web 應用的基石

PHP 學習資料 PHP 學習資料 PHP 學習資料 在當今數字化時代&#xff0c;Web 應用無處不在&#xff0c;而 PHP 作為一種廣泛使用的服務器端腳本語言&#xff0c;承載著無數網站和應用的核心邏輯。然而&#xff0c;隨著網絡攻擊手段日益復雜&#xff0c;PHP 應用面臨著諸多安全…

Qt中使用QPdfWriter類結合QPainter類繪制并輸出PDF文件

一.類的介紹 1.QPdfWriter介紹 Qt中提供了一個直接可以處理PDF的類&#xff0c;這就是QPdfWriter類。 &#xff08;1&#xff09;PDF文件生成 支持創建新的PDF文件或覆蓋已有文件&#xff0c;通過構造函數直接綁定文件路徑或QFile對象&#xff1b; 默認生成矢量圖形PDF&#…

Golang GORM系列:GORM無縫集成web框架

高效的數據管理是每個成功的web應用程序的支柱。GORM是通用的Go對象關系映射庫&#xff0c;它與流行的Go web框架搭配得非常好&#xff0c;提供了無縫集成&#xff0c;簡化了數據交互。本指南將帶你探索GORM和web框架&#xff08;如Gin&#xff0c; Echo和Beego&#xff09;之間…

SAM C++ TensorRT(實時圖像分割)

SPEED SAM C TENSORRT &#x1f310; 1、概述 用于SAM&#xff08;segment anything model分割一切模型&#xff09;的TensorRT和CUDA優化的高表現C實現&#xff0c;特別適用于實時圖像分割任務。 &#x1f4e2; 更新 模型轉換&#xff1a;從ONNX模型構建TensorRT引擎以加速…

【LLAMA】羊駝從LLAMA1到LLAMA3梳理

every blog every motto: Although the world is full of suffering&#xff0c; it is full also of the overcoming of it 0. 前言 LLAMA 1到3梳理 1. LLAMA 1 論文&#xff1a; LLaMA: Open and Efficient Foundation Language Models 時間&#xff1a; 2023.02 1.1 前言…

什么是網絡安全?網絡安全防范技術包括哪些?

伴隨著互聯網的發展&#xff0c;它已經成為我們生活中不可或缺的存在&#xff0c;無論是個人還是企業&#xff0c;都離不開互聯網。正因為互聯網得到了重視&#xff0c;網絡安全問題也隨之加劇&#xff0c;給我們的信息安全造成嚴重威脅&#xff0c;而想要有效規避這些風險&…

【從0做項目】Java搜索引擎(7) web模塊

阿華代碼&#xff0c;不是逆風&#xff0c;就是我瘋 你們的點贊收藏是我前進最大的動力&#xff01;&#xff01; 希望本文內容能夠幫助到你&#xff01;&#xff01; 目錄 文章導讀 零&#xff1a;項目結果展示 一&#xff1a;后端web模塊 1&#xff1a;思路 2&#xff1a…

Visual Studio Code 集成 Baidu Comate

文章目錄 安裝Baidu Comate插件 安裝Baidu Comate插件 從左主側欄中 點擊 【擴展】這個圖標&#xff0c;然后在上方輸入欄中輸入 baidu comate —>選中列出的Bai Comate —>點擊 【安裝】按鈕&#xff0c;等待安裝完畢…

WeMos D1+PIR+Android 的小場景制作

最近在做一個有趣的小場景功能&#xff0c;其實已經有成熟產品&#xff0c;但是考慮到沒法實現場景擴展&#xff0c;所以自己開始動手做。 場景描述&#xff1a;玄關人體感應&#xff0c;有人進門&#xff0c;致歡迎詞&#xff0c;有人離開&#xff0c;致歡送詞。 硬件設備&a…

Android ListPreference使用

Android ListPreference使用 參考 添加鏈接描述 導入 androidx.preference.ListPreferenceListPreference是Android中的一個Preference子類,用于顯示一個可選擇的列表,并且可以保存用戶所選擇的值。它繼承自DialogPreference,可以在用戶點擊時彈出一個對話框,顯示可選擇的…

Spring Security實現記住我功能的實戰指南

在現代Web應用中&#xff0c;"記住我"功能是提升用戶體驗的重要特性之一。用戶無需在每次訪問時重新登錄&#xff0c;這不僅方便&#xff0c;還能增強用戶對應用的粘性。今天&#xff0c;我們將通過一個具體的實例&#xff0c;詳細探討如何在Spring Security中實現&q…

用命令模式設計一個JSBridge用于JavaScript與Android交互通信

用命令模式設計一個JSBridge用于JavaScript與Android交互通信 在開發APP的過程中&#xff0c;通常會遇到Android需要與H5頁面互相傳遞數據的情況&#xff0c;而Android與H5交互的容器就是WebView。 因此要想設計一個高可用的 J S B r i d g e JSBridge JSBridge&#xff0c;不…

ModuleNotFoundError: No module named ‘timm.optim.novogr兩種解決方法

運行報錯 from timm.optim.novograd import NovoGradModuleNotFoundError: No module named ‘timm.optim.novograd’。 問題原因 timm版本過高&#xff0c;novograd函數已被拋棄。 解決辦法 方法1&#xff1a;安裝更低版本的timm pip install timm0.4.12方法2&#xff1a…

DeepSeek 本地部署指南:從零開始搭建 AI 搜索工具

1. 引言 背景介紹 DeepSeek 是一款基于 AI 的搜索工具&#xff0c;能夠高效處理海量數據&#xff0c;提供精準的搜索結果。它結合了 Ollama 的模型管理能力&#xff0c;使得部署更加便捷。 為什么選擇本地部署 本地部署可以確保數據隱私&#xff0c;避免云端傳輸的風險&…

昇騰DeepSeek模型部署優秀實踐及FAQ

2024年12月26日&#xff0c;DeepSeek-V3橫空出世&#xff0c;以其卓越性能備受矚目。該模型發布即支持昇騰&#xff0c;用戶可在昇騰硬件和MindIE推理引擎上實現高效推理&#xff0c;但在實際操作中&#xff0c;部署流程與常見問題困擾著不少開發者。本文將為你詳細闡述昇騰 De…

vscode復制到下一行

linux中默認快捷鍵是ctrl shift alt down/up 但是在vscode中無法使用&#xff0c;應該是被其他的東西綁定了&#xff0c;經測試&#xff0c;可以使用windows下的快捷鍵shift alt down/up { “key”: “shiftaltdown”, “command”: “editor.action.copyLinesDownAction”…

網絡爬蟲學習:借助DeepSeek完善爬蟲軟件,實現模擬鼠標右鍵點擊,將鏈接另存為本地文件

一、前言 最近幾個月里&#xff0c;我一直在學習網絡爬蟲方面的知識&#xff0c;每有收獲都會將所得整理成文發布&#xff0c;不知不覺已經發了7篇日志了&#xff1a; 網絡爬蟲學習&#xff1a;從百度搜索結果抓取標題、鏈接、內容&#xff0c;并保存到xlsx文件中 網絡爬蟲學…

Arduino 第十六章:pir紅外人體傳感器練習

Arduino 第十六章&#xff1a;PIR 傳感器練習 一、引言 在 Arduino 的眾多有趣項目中&#xff0c;傳感器的應用是非常重要的一部分。今天我們要學習的主角是 PIR&#xff08;被動紅外&#xff09;傳感器。PIR 傳感器能夠檢測人體發出的紅外線&#xff0c;常用于安防系統、自動…

CV -- YOLOv8 圖像分割(GPU環境)

目錄 參考視頻&#xff1a; 標注 JSON轉為TXT 訓練 驗證 參考視頻&#xff1a; 使用 Yolov8 自定義數據集進行圖像分割_嗶哩嗶哩_bilibili 標注 數據集&#xff1a; 我使用的是一些蘋果數據集&#xff0c;可以在我的csdn資源中下載&#xff1a; https://download.csdn.net/do…