做个开源博客学习Vite2 + Vue3 (三)博客设计和代码设计
项目搭建好了之后是不是可以编码了呢?
等等不要着急,我们是不是应该先设计一下?比如博客的功能等?
博客设计
先做个简单的个人博客,因为是个人版,所以可以省略注册、登录这些功能,表结构也可以简单一点。
基础功能:添加博文、显示博文、博文列表+查询+分页、讨论列表和添加讨论。
虽然功能弱了一点,但是麻雀虽小五脏俱全,vite2 和 vue3 的基础用法也可以体现一些。
功能设计

是不是做成图更明显一些?
代码设计

model设计

model代码
先来看看 model 的代码。
/src/model/blogModel.js
/**
* 显示博文用,建表用
* @returns 博文的全部的属性
*/
export const blog = () => {
return {
// id: 0,
title: '', // 这是一个博客标题
groupId: 0, // 分组ID
addTime: new Date(), // 添加时间
introduction: '', // 这是博客的简介
concent: '', // 这是博客的详细内容
state: 1, // 1:草稿;2:发布;3:删除
viewCount: 0, // 浏览量
agreeCount: 0, // 点赞数量
discussCount: 0 // 讨论数量
}
}
/**
* 表单用的博文,绑定表单用。
* * title:文章标题
* @returns 添加博文需要的属性
*/
export const blogForm = () => {
return {
// id: new Date().valueOf(),
title: '', // 这是一个博客标题
addTime: new Date(), // 添加时间
introduction: '', // 这是博客的简介
concent: '', // 这是博客的详细内容
state: 1 // 1:草稿;2:发布;3:删除
}
}
/**
* 首页用的博文列表,按需设置字段
* @returns 博文列表
*/
export const blogList = () => {
return {
id: 0,
title: '', // 这是一个博客标题
addTime: '', // 添加时间
introduction: '', // 这是博客的简介
viewCount: 0, // 浏览量
agreeCount: 0, // 点赞数量
discussCount: 0 // 讨论数量
}
}
/**
* 编辑博文用的列表
* @returns 文章标题列表
*/
export const articleList = () => {
return {
id: 0,
title: '', // 这是一个博客标题
addTime: '', // 添加时间
viewCount: 0, // 浏览量
agreeCount: 0, // 点赞数量
discussCount: 0 // 讨论数量
}
}
/**
* 建表用的讨论
* @returns 讨论表
*/
export const discuss = () => {
return {
// id: 0,
blogId: 0,
discusser: '' , // 昵称
addTime: new Date(), // 时间
concent: '', // 内容
agreeCount: 0
}
}
/**
* @returns 讨论的model
*/
export const discussList = () => {
return {
id: 0,
discusser: '' , // 昵称
addTime: '', // 时间
concent: '', // 内容
agreeCount: 0
}
}
原生js是不需要先定义对象的,只是我感觉把需要的对象放在一起集中管理一下,还是比较方便的,虽然这么做用处不大,因为不是ts,没有任何强制性也没有检查机制,但是还是想集中管理一下。
状态设计

状态嘛,简单地说就是多个组件共享的数据,当然这么说不够严谨。
/src/model/blogState.js
import { inject } from "vue"
export const blogState = {
currentGroupId: 0, // 选择的分组ID。0:没选择
currentArticleId: 0, // 选择的文章ID。
editArticleId: 0, // 当前修改的文章ID
findQuery: { }, // 查询条件
page: { // 分页参数
pageTotal: 100,
pageSize: 2,
pageIndex: 1,
orderBy: { id: false }
},
isReloadDiussList: false
}
/**
* 状态的管理
* * 获取状态
* * 设置当前选择的分组
* * 设置当前选择的文章
* * 设置当前编辑的文章
*/
export default function blogStateManage() {
// 先把状态取出来,否则在 function 里面无法读取。
const state = inject('blogState')
// 子组件里面获取状态
const getBlogState = (id) => {
return state
}
// 设置当前选择的分组
const setCurrentGroupId = (id) => {
state.currentGroupId = id
}
// 设置当前编辑的文章
const setEditArticleId = (id) => {
state.editArticleId = id
}
// 设置更新讨论列表
const setReloadDiussList = () => {
state.isReloadDiussList = !state.isReloadDiussList
}
return {
setReloadDiussList, // 设置更新讨论列表
getBlogState, // 获取状态
setEditArticleId, // 设置当前编辑的文章
setCurrentGroupId // 设置当前选择的分组
}
}
算是一个简易的状态管理吧,先定义一下需要的状态,在main里面注入状态,然后用 inject 提取状态,再写几个设置状态的函数,基本就可以搞定了。
后续想写成插件的形式,当然会完善一些功能,不会这么单薄。
感觉 Vuex 有点太厚重了,这里也不需要那么强大的功能,所以就自己实现了一个简单的。
未完待续,后面更精彩。
源码
https://gitee.com/naturefw/vue3-blog
在线演示
https://naturefw.gitee.io/vue3-blog
做个开源博客学习Vite2 + Vue3 (三)博客设计和代码设计的更多相关文章
- 做个开源博客学习Vite2 + Vue3 (一)搭建项目
前言 不会 webpack,遇到报错就一头雾水,完全不知道怎么办,而且体积还大速度还慢. 所以尤雨溪做了 vite 后就很向往,只是知道自己水平有限还是等大佬先趟趟坑,等差不多了在跳. 现在vite2 ...
- 做个开源博客学习Vite2 + Vue3 (四)实现博客功能
我们再来看一下管理类的设计. Composition API,就是组合API的意思,那么是不是应该把js代码分离出来,做成独立的管理类的形式呢? 这样代码可以更整洁一些,主要是setup里面的代码就不 ...
- css扁平化博客学习总结(三)header代码实现
页头.banner.正文.页脚的宏观布局 1.布局顺序的重要性: 由大到小,着眼最大的部分,慢慢细分. <body> <header><!-- 页头开始 --> & ...
- MySQL 学习笔记(三):完整性和触发器设计
(一)完整性设计 方法一.在设计表时定义约束 删除数据库school,建立新数据库school1 drop database school; create database school; use s ...
- FPGA一个博客学习
FPGA一个博客学习 http://bbs.ednchina.com/BLOG_PERSONALCAT_100185_2001619.HTM
- 多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客
多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客 多IDC数据分布--MySQL多机房部署
- Do Now 一个让你静心学习的APP——团队博客
Do Now 一个让你静心学习的APP 来自油条只要半根团队的智慧凝聚的产物! 团队博客总目录: 团队作业第一周 团队作业第二周 Do Now -- 团队冲刺博客一 Do-Now-团队Scrum 冲刺 ...
- 我的第一篇博客-学习书写markdown
Markdown学习(标题:井号+空格+标题名字 回车 ) 标题: 二级标题## 空格+名字 三级标题### 空格+名字 四级标题#### 空格+名字 五级标题##### 空格+名字 六级标题#### ...
- 开源项目live555学习心得
推荐:伊朗美女找丈夫比找工作难女人婚前一定要看清三件事 × 登录注册 疯狂少男-IT技术的博客 http://blog.sina.com.cn/crazyboyzhaolei [订阅][手机订 ...
随机推荐
- 1080 Graduate Admission——PAT甲级真题
1080 Graduate Admission--PAT甲级练习题 It is said that in 2013, there were about 100 graduate schools rea ...
- git配置了公钥,在下载项目时为什么还要输入密码
配置git地址:https://www.cnblogs.com/lz0925/p/10794616.html 原文链接:https://blog.csdn.net/xiaomengzi_16/arti ...
- ============================================ 微信小程序开发学习
开发文档: https://developers.weixin.qq.com/miniprogram/dev/framework/
- Vue使用 空白占位符
当有时候需要在页面显示时显示空格时,可以使用 ,但是使用这个占位符时,无论写多少个,就只能显示一个空格.要想显示多个空格进行占位,这种方式显然是可行的,解决方法是使用转义字符. 先看代码: <t ...
- 低功耗蓝牙 ATT/GATT/Service/Characteristic 规格解读
什么是蓝牙service和characteristic?如何理解蓝牙profile? ATT和GATT两者如何区分?什么是attribute? attribute和characteristic的区别是 ...
- Vue 解决img标签不显示图片问题
今天在写前端页面的时候,上传图片返回图片地址后,<img> 标签居然显示不出来,经过排查,原因是 <img v-if="hotel.url" :src=" ...
- 40. 组合总和 II + 递归 + 回溯 + 记录路径
40. 组合总和 II LeetCode_40 题目描述 题解分析 此题和 39. 组合总和 + 递归 + 回溯 + 存储路径很像,只不过题目修改了一下. 题解的关键是首先将候选数组进行排序,然后记录 ...
- 剑指 Offer 32 - II. 从上到下打印二叉树 II + 层次遍历二叉树 + 按层存储
剑指 Offer 32 - II. 从上到下打印二叉树 II Offer_32 题目描述: 题解分析: 这道题我一开始想到的解决方法较粗暴,就是使用两个变量来记录当前层的节点数和下一层的结点数. 以上 ...
- 记一次Drone无法触发构建的问题
问题 好巧不巧,当你晚上准备上线的时候,在下午临近下班的时候CI&CD工具出问题了,提交代码不能触发构建,不能上线了,Drone平台那边也下班了,正好CICD依赖的公司git仓库也出问题了(就 ...
- java 入门环境搭建
Java帝国的诞生 1972年C诞生 1982年C++诞生 1995年JAVA诞生,为了实现真正的跨平台,在操作系统之上又加了抽象层,叫做JAVA的虚拟机,统称JVM 三高问题: 高可用 高性能 高并 ...