做个开源博客学习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 [订阅][手机订 ...
随机推荐
- 【Azure 云服务】如何从Azure Cloud Service中获取项目的部署文件
问题描述 在历史已经部署的云服务(Azure Cloud Service)中,如何获取到项目在很久以前的部署包文件呢? 解决办法 1)如果部署云服务是通过门户上传部署包到存储账号中,则可以直接从存储账 ...
- 死磕以太坊源码分析之EVM动态数据类型
死磕以太坊源码分析之EVM动态数据类型 配合以下代码进行阅读:https://github.com/blockchainGuide/ 写文不易,给个小关注,有什么问题可以指出,便于大家交流学习. So ...
- Spring @Transactional注解和ReentrantLock同步锁同时使用不能同步的问题
结论:如果在service层的方法上同时使用事务和同步锁无法保证数据同步. 1 @Service 2 public class ServiceImpl{ 3 4 private static Lock ...
- 一文读懂clickhouse集群监控
更多精彩内容,请关注微信公众号:后端技术小屋 一文读懂clickhouse集群监控 常言道,兵马未至,粮草先行,在clickhouse上生产环境之前,我们就得制定好相关的监控方案,包括metric采集 ...
- 解决vue 绑定事件会覆盖默认参数的问题
解决vue 绑定事件会覆盖默认参数的问题 在使用一些ui框架的时候,某些组件的框架中的事件所规定的参数不能满足实际开发的需要,但是直接传入参数会把默认的参数覆盖掉 解决方法:将参数放入箭头函数中,传递 ...
- MySQL:逻辑库与表管理
逻辑库管理 语句 说明 CREATE DATABASE 逻辑库名; 创建逻辑库 SHOW DATABASES; 显示所有逻辑库 DROP DATABASE 逻辑库名; 删除逻辑库 USE 逻辑库名; ...
- 2020年HTML5考试模拟题整理(一)
1.哪个元素被称为媒体元素的子元素? 答案:<track>. <track> 标签为媒体元素(比如 <audio> and <video>)规定外部文本 ...
- STM32F103VET6-keil工程配置-USART串口中断
1.新建一个标准空白工程 2.设置时钟源为外部HSE时钟 1 #ifndef __SYSCLK_CONFIG_H 2 #define __SYSCLK_CONFIG_H 3 #include &quo ...
- 谈谈C++中的数据对齐
对于C/C++程序员来说,掌握数据对齐是很有必要的,因为只有了解了这个概念,才能知道编译器在什么时候会偷偷的塞入一些字节(padding)到我们的结构体(struct/class),也唯有这样我们才能 ...
- 数字转人民币读法-python3
""" 2 把一个浮点数分解成证书备份和小数部分 3 """ 4 def divide(num): 5 intnum = int(num) ...