Vue3 博客项目

做完任务系统,再来做一个"博客项目":首页展示文章列表、支持标签筛选与关键字搜索、点击进入详情页、可把喜欢的文章加入收藏。相比任务系统,它更侧重"内容展示 + 多页面交互",会让你把组件、路由、生命周期、watch、Pinia 综合用一遍。

项目功能预览

  • 首页:文章卡片列表(标题、摘要、标签、日期);
  • 详情页:展示文章完整正文;
  • 标签筛选:点击标签只看相关文章;
  • 搜索框:输入关键字实时过滤标题;
  • 收藏功能:把文章加入收藏并在独立页面查看。

文章的数据结构

先准备一份本地模拟数据 src/data/posts.js,每个对象对应一篇文章:

// src/data/posts.js
export const posts = [
  {
    id: 1,
    title: 'Vue3 组合式 API 入门',
    summary: '一张图看懂 setup 与 ref',
    content: '<p>完整正文……</p>',
    tags: ['Vue3'],
    date: '2024-06-01'
  },
  {
    id: 2,
    title: 'Pinia 状态管理实战',
    summary: '全局状态就该这样管',
    content: '<p>完整正文……</p>',
    tags: ['Vue3', 'Pinia'],
    date: '2024-06-10'
  }
]

页面与路由规划

路由页面说明
/HomeView文章列表 + 搜索 + 标签栏
/post/:idPostView文章详情
/favoritesFavoritesView收藏列表

:id 是动态路由参数,详情页通过 route.params.id 找到对应文章。

各章节要练的知识点

  • 模板语法渲染:插值、v-for、v-bind 渲染文章列表;
  • 拆分组件:PostCard、TagList、SearchBar 等小组件;
  • 路由跳转:列表 → 详情 → 收藏的页面导航;
  • 生命周期与数据请求:模拟异步获取文章;
  • watch 与搜索:监听关键字即时过滤;
  • Composable:把"取文章"逻辑抽成 usePosts;
  • Pinia 收藏:跨页面共享收藏状态。

先搭出首页雏形

只需十几行就能把文章列表渲染出来:

<!-- views/HomeView.vue -->
<script setup>
import { posts } from '../data/posts'
</script>

<template>
  <h1>我的博客</h1>
  <ul>
    <li v-for="post in posts" :key="post.id">
      <h2>{{ post.title }}</h2>
      <p>{{ post.summary }}</p>
    </li>
  </ul>
</template>

效果:打开首页即看到全部文章的标题与摘要,为后续加入详情跳转、搜索筛选打下基础。

小结

博客项目把内容型站点常见的交互都包含了。从下一节开始,逐步把它实现出来。

笔记加载中…