做个开源博客学习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 [订阅][手机订 ...
随机推荐
- 程序员如何在VsCode上看基金?
一 我是一个程序员. 代码是我的禁锢,基金是我的自由. 打破禁锢,奔向自由,也许只差几个定投. 有人说,买基金一定要心态好,要学会风险对冲,把8成的钱全仓买基金,剩余2成买意外身亡险,基金大涨就赚,基 ...
- Python3.x 基础练习题100例(61-70)
练习61: 题目: 打印出杨辉三角形. 程序: if __name__ == '__main__': a = [] for i in range(10): a.append([]) for j in ...
- Hi3559AV100的VI细节处理说明
因为项目后期涉及到MPP平台下的VI接口,现把有关视频输入VI模块的实现细节总结,也方便大家进一步了解. 1.整体概述 视频输入(VI)模块实现的功能:通过 MIPI Rx(含 MIPI 接口.LVD ...
- 抽一根烟的时间学会.NET Core 操作RabbitMQ
什么是RabbitMQ? RabbitMQ是由erlang语言开发的一个基于AMQP(Advanced Message Queuing Protocol)协议的企业级消息队列中间件.可实现队列,订阅/ ...
- 初窥MyBatis-普通的CRUD操作
编写接口 编写对应的Mapper.xml中的sql语句 测试(增删改需要提交事务) <mapper namespace="com.perwrj.dao.UserMapper" ...
- JS table排序
<html lang="en"> <head> <meta charset="UTF-8"> <meta http-e ...
- slickgrid ( nsunleo-slickgrid ) 2 修正区域选择不能跨冻结列的问题
slickgrid( nsunleo-slickgrid ) 2 修正区域选择不能跨冻结列的问题 周六的时候,留了个小小的尾巴,区域选择的问题进做到了定位: 问题原因,在slickgrid启动冻结之 ...
- 键盘--扫描码--ASCII码--显示器上的字符
在上一篇,我讲了键盘操作会产生扫描码以及如何解析Pause键和Print Screen键的扫描码. 在这一篇,我会说清楚"键盘上的输入为什么会出现在显示器上". 极简版 我们敲击键 ...
- unittest系列(三)unittest用例如何执行
在前面的分享中,我们分别讲了unittest的相关流程以及相关断言,那么很多人,都会问了unittest的用例,应该如何执行呢,这次,我们就来看看,unittest用例如何执行.首先,我们可以使用py ...
- 让JS代码Level提升的忍者秘籍(实用)
本文章共2377字,预计阅读时间5-10分钟. 前言 没有前言. 你准备好成为同事眼中深藏不露.高深莫测.阳光帅气的前端开发了吗? 那就开始吧! 本文秉承宗旨:代码实用与逼格并存. 提升JS代码Lev ...