当前位置: 首页 > news >正文

Vue3自定义文章列表组件

一、Vue3的代码展示

<template><div><div v-for="article in articles" :key="article.id" class="article-card"><div class="author-info"><img :src="article.avatar" alt="Author Avatar" class="avatar" /><div class="author-details"><span class="author-name">{{ article.username }}</span><span class="publish-time">{{ article.createTime }}</span></div></div><div class="article-details"><h3 class="article-title">{{ article.title }}</h3><p class="article-info">{{ article.summary }}</p></div><div class="article-stats"><span class="stat-item">查看数: {{ article.viewCount }}</span><span class="stat-item">点赞数: {{ article.likeCount }}</span><span class="stat-item">评论数: {{ article.commentCount }}</span></div></div></div>
</template>
<script setup>
const props = defineProps(['articles']);
</script>
<style scoped>
.article-card {border: 1px solid #ddd;padding: 16px;display: flex;flex-direction: column;align-items: flex-start;transition: background-color 0.3s; /* 添加过渡以实现平滑的颜色变化 */
}.article-card:hover {background-color: #fafafa; /* 在悬停时改变背景颜色 */
}.author-info {display: flex;align-items: center;margin-bottom: 8px;
}.avatar {width: 40px;height: 40px;border-radius: 50%;margin-right: 8px;
}.author-details {display: flex;align-items: baseline;
}.author-name {font-weight: bold;margin-right: 4px;
}.publish-time {color: #888;margin-left: 20px;
}.article-details {margin-bottom: 12px;display: flex;flex-wrap: wrap;flex-direction: column;/*background-color: #3fdbf0;*/text-align: left; /* Align content to the left */
}.article-title {margin-bottom: 2px;font-size: 20px;
}.article-info {color: #555;margin-bottom: 8px;font-size: 16px;
}.article-stats {display: flex;justify-content: space-between;color: #888;
}.stat-item {margin-right: 12px; 
}
</style>

二、 代码解读

HTML 模板部分:

  1. <template> 标签是 Vue.js 模板的开始。
  2. v-for="article in articles" 遍历 articles 数组中的每个 article
  3. :key="article.id" 用于标识每个循环中的元素,以便 Vue 可以高效地更新 DOM。
  4. class="article-card" 定义了一个文章卡片的样式。
  5. v-bind 用于动态地绑定元素的属性,例如 :src="article.avatar" 将文章作者的头像与 article.avatar 数据绑定。
  6. {{ expression }} 用于在模板中插入表达式的值。

JavaScript 部分:

  1. <script setup> 是 Vue 3 提供的新语法,用于编写组件的逻辑部分。
  2. const props = defineProps(['articles']); 用于声明接收来自父组件的 articles 属性。

CSS 部分:

  1. <style scoped> 表示样式仅对当前组件起作用。
  2. 样式定义了文章卡片的整体样式,作者信息的样式,文章详情的样式,以及文章统计信息的样式。
  3. :hover 选择器用于在鼠标悬停时改变文章卡片的背景颜色。
  4. 通过样式定义了作者头像、作者姓名、发布时间、文章标题、文章摘要等的样式。

三、结果展示

在这里插入图片描述

相关文章:

  • 力扣第 387 场周赛第四题 将元素分配到两个数组中 II 二分查找,离散化,线段树
  • 【外设篇】——显示器
  • 挑战杯 基于机器视觉的银行卡识别系统 - opencv python
  • 第七十四天漏洞发现-Web框架中间件插件BurpSuite浏览器被动主动探针
  • 51单片机-(中断系统)
  • linux安全--DNS服务部署
  • 【C++提高编程】
  • PHP项目中composer和Git的组合使用
  • Sqli-labs靶场第16关详解[Sqli-labs-less-16]自动化注入-SQLmap工具注入
  • 电子设计从零开始”这本书的适用对象是谁?
  • sql基本语法+实验实践
  • 解锁智慧之门:自然语言处理与神奇的语言模型
  • 关于数据提交上传服务端的数据类型以及项目打包上线的流程
  • mysql5.7配置主从
  • 技术实践|百度安全「大模型内容安全」高级攻击风险评测
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • JavaScript设计模式之工厂模式
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • mac修复ab及siege安装
  • node学习系列之简单文件上传
  • PV统计优化设计
  • use Google search engine
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 电商搜索引擎的架构设计和性能优化
  • 官方解决所有 npm 全局安装权限问题
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 使用Gradle第一次构建Java程序
  • 使用Swoole加速Laravel(正式环境中)
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • ​ssh免密码登录设置及问题总结
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $.proxy和$.extend
  • $GOPATH/go.mod exists but should not goland
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (算法二)滑动窗口
  • (一)RocketMQ初步认识
  • (一)WLAN定义和基本架构转
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (状压dp)uva 10817 Headmaster's Headache
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Core引入性能分析引导优化
  • .NET程序员迈向卓越的必由之路
  • .NET分布式缓存Memcached从入门到实战
  • .NET和.COM和.CN域名区别
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • @KafkaListener注解详解(一)| 常用参数详解
  • [17]JAVAEE-HTTP协议
  • [20140403]查询是否产生日志
  • [Android]How to use FFmpeg to decode Android f...
  • [Angular] 笔记 21:@ViewChild
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [BZOJ1053][HAOI2007]反素数ant