VUE3套用组件库快速开发(以Element Plus为例)三

  1. 更新前端主页,使用v-for来创建条目
js 复制代码
<template>
  <div style="max-width: 1000px; margin: 0 auto;">
    <el-row :gutter="20" style="margin-bottom: 20px;">
      <el-col :span="8">
        <el-statistic title="社区帖子总数" :value="posts.length" />
      </el-col>
    </el-row>

    <el-empty v-if="posts.length === 0" description="暂时没有帖子,快去发一个吧!" />
    
    <div v-else>
      <el-card 
        v-for="item in posts" 
        :key="item.id" 
        style="margin-bottom: 15px; cursor: pointer;"
        @click="viewDetail(item)"
      >
        <div style="display: flex; justify-content: space-between; align-items: center;">
          <h3 style="margin: 0;">{{ item.title }}</h3>
          <el-tag :type="getTagType(item.tag)">{{ item.tag }}</el-tag>
        </div>
        
        <p style="color: #666; font-size: 14px; margin: 10px 0;">
          {{ item.summary }}
        </p>

        <div style="display: flex; align-items: center; font-size: 12px; color: #999;">
          <el-avatar :size="20" src="https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png" style="margin-right: 8px;" />
          <span>{{ item.author }}</span>
          <span style="margin-left: 20px;">发布于:{{ item.time }}</span>
        </div>
      </el-card>
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue'
import { ElMessage } from 'element-plus'

// 1. 定义模拟数据 (将来这些数据会从服务器 API 获取)
const posts = ref([
  {
    id: 1,
    title: 'Vue 3 + Element Plus 起步指南',
    summary: '今天开始学习前端,发现 Vue 3 的组合式 API 真的很好用...',
    tag: '前端',
    author: '小明',
    time: '2026-01-08'
  },
  {
    id: 2,
    title: '如何评价 2026 年的后端技术栈?',
    summary: '现在 Node.js 和 Go 依然是主流吗?大家怎么看?',
    tag: '后端',
    author: '技术大牛',
    time: '2026-01-07'
  },
  {
    id: 3,
    title: '社区求职板块正式上线啦!',
    summary: '欢迎各位 HR 和求职者在这里发布信息,共建友好社区。',
    tag: '公告',
    author: '管理员',
    time: '2026-01-01'
  }
])

// 2. 根据标签返回不同的颜色
const getTagType = (tag) => {
  if (tag === '前端') return 'success'
  if (tag === '后端') return 'warning'
  if (tag === '公告') return 'danger'
  return 'info'
}

// 3. 点击卡片的事件
const viewDetail = (item) => {
  ElMessage.info(`你点击了帖子:${item.title},详情功能开发中...`)
}
</script>

9 页面为什么这么奇怪?

这个时候页面大概还是奇奇怪怪的,比如说一个是未能铺满整个页面,而成为了一个小卡片,背景都是黑色的,排版也是乱的。

原因很简单: Vue 的官方模板自带了一些基础 CSS 样式(比如居中对齐、深色模式适配、特定的边距),这些样式和 Element Plus 的布局撞车了,导致你的页面看起来像个"缩在中间的黑色小盒子"。

我们要做的就是:彻底清空这些干扰项,让页面回归"白板"状态。

  1. 找到 src/assets/main.css 文件,删除里面的全部内容(或者直接删除这个文件)。
  2. 找到 src/assets/base.css 文件,同样删除全部内容
  3. 打开 src/main.js,检查有没有一句 import './assets/main.css'。如果有,删掉它
相关推荐
方也_arkling9 分钟前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
毕设源码-朱学姐12 分钟前
【开题答辩全过程】以 基于web教师继续教育系统的设计与实现为例,包含答辩的问题和答案
前端
qq_1777673717 分钟前
React Native鸿蒙跨平台剧集管理应用实现,包含主应用组件、剧集列表、分类筛选、搜索排序等功能模块
javascript·react native·react.js·交互·harmonyos
qq_1777673723 分钟前
React Native鸿蒙跨平台自定义复选框组件,通过样式数组实现选中/未选中状态的样式切换,使用链式调用替代样式数组,实现状态驱动的样式变化
javascript·react native·react.js·架构·ecmascript·harmonyos·媒体
web打印社区26 分钟前
web-print-pdf:突破浏览器限制,实现专业级Web静默打印
前端·javascript·vue.js·electron·html
RFCEO1 小时前
前端编程 课程十三、:CSS核心基础1:CSS选择器
前端·css·css基础选择器详细教程·css类选择器使用方法·css类选择器命名规范·css后代选择器·精准选中嵌套元素
烬头88211 小时前
React Native鸿蒙跨平台采用了函数式组件的形式,通过 props 接收分类数据,使用 TouchableOpacity实现了点击交互效果
javascript·react native·react.js·ecmascript·交互·harmonyos
Amumu121381 小时前
Vuex介绍
前端·javascript·vue.js
We་ct1 小时前
LeetCode 54. 螺旋矩阵:两种解法吃透顺时针遍历逻辑
前端·算法·leetcode·矩阵·typescript
2601_949809591 小时前
flutter_for_openharmony家庭相册app实战+相册详情实现
javascript·flutter·ajax