Vue进阶之Vue项目实战(二)

Vue项目实战

  • 构建基础框架
    • 路由
  • 项目( v1.0,base-app-layer)
    • 导航 router
    • 物料
      • 编排选型
    • 插件化
      • 插件化平时写代码场景
    • 配置器开发

构建基础框架

路由

路由分类:

  1. memoryHistory:内存路由,路由信息记录在内存中,当页面刷新,整个路由记录栈没有了的场景使用内存路由。当做状态用,存在内存中间的历史记录栈。(组件的tabs标签页切换算是内存路由)
  2. hashHistory:hash模式,通过触发onhashchange方法来监听URL中hash值的变化
  3. browserHistory/webHistory:web模式,通过popstate和pushState监听和触发来改变历史记录栈里的数据
  4. 面向ssr的记录模式

区别:跳转路由的方法不一样,监听历史记录栈变更的方法不一样
请添加图片描述

common-基础封装,负责api协议的约定,在不同端处理实际问题后,在抽象层上一层再做一层封装
hash-
html5-webHistory
memory-memoryHistory

路由

  • app 主路由
    • dataSource 数据源
      • :id 动态路由
    • layout 界面组件
    • actions

跟路由相关的组件都放在views,其他普通的组件都放在components中
view:路由组件
components:其他普通组件
blocks:重点组件

项目( v1.0,base-app-layer)

项目分支:第一个和第二个分支是基础的分支(init project,base-config),重点

导航 router

  • app
    • dataSource 数据源
    • layout 布局
    • actions 动作
  • about

怎么实现切换页面后,标签不同颜色的问题?
在AppNavigator.vue组件中:

  1. 定义 组件对象,里面包括value,label,bg,color,borderColor属性
  2. 使用computed对组件对象处理,获取当前的router.name,来看router.name名称和当前激活的内容匹配上

物料

编排选型

考虑技术选型和方案
例如:

  • 拖拽,应用拖拽实现
    • html5的drag和drop实现
    • mousemove事件

编排引擎形式:
流式、流式2
自由拖拽、
grid(仪表盘开发)
vue-grid-layout:底层用什么事件来做的?interactjs库

=>方案调研后,使用的是流式布局的smooth-dnd

  • SmoothDnd
    • SmoothDndContainer - 负责容器
    • SmoothDndDraggable - 负责拖拽的元素
  • AppEditorRenderer - 使用的地方,不同端抹平差异的地方
    • LaptopPreviewer PC端 - 需要地址栏
    • MobilePreviewer 移动端 - simulator模拟器
  • AppPreviewer
    • LaptopPreviewer - 上层不同的地方,下层-BlocksRenderer 移动端和PC端公用的
    • MobilePreviewer

请添加图片描述
8个组件(物料)需要用8种不同逻辑去渲染,最底层做抽象,向外暴露统一的API;
设计组件的渲染器,需要关注 他向外部暴露了哪些方法、接口、props、事件都有哪些
例如,要封装一个图表渲染的组件,需要考虑
底层封装需要负责哪些内容(负责数据转换、负责图表加载、请求数据出错是否重试等等)
往上封装图表时候,图表不同对应类型的时候,封装 折线图、饼图、旭日图、条形图等等

  • blocks
    • basic - 基础物料
      • View
      • Quote - 传进来的blockInfo,拿到props.blockInfo.props.content就能渲染对应的内容
      • Image
      • HeroTitle
      • Chart
    • external - 额外物料
      • Button
      • Form
      • Notes
    • BlockRenderer.vue - 基础物料+额外物料 加和 统一用这个来渲染
      <component :is=“$blocksMap[block.type].material” :blockInfo=“block”></component>
      block.type -物料类型 material-具体代码在哪
      blockInfo 物料信息
      $blocksMap - 下面setup方法的install中讲述

插件化

  • src
    • setup.ts - 定义了很多block(物料),本地物料;
  1. 使用了插件化机制,整个block要通过BlockSuite底座来维护,添加时候addBlock用数组的格式将物料添加进去。block是一个对象,包含type和material两个属性
  2. setup方法:
    install方法挂载几个东西,
    (1)app.provide(blocksMapSymbol,blocksMap)
    将blocksMap传到以下所有的内容,通过inject方法插入这些数据,能够把深层状态直接传递进去
    (2)app.config.globalProperties.$blocksMap = blocksMap 绑定属性 $blocksMap

插件化物料后,怎么做权限?举例说明

const blockSuite=new BlockSuite()const authCode=0b1111const authMap={button:0b001,form:0b0010,notes:0b0100
}const auth=authMapif(authMap.button & authCode){}

插件化平时写代码场景

pinia请添加图片描述

Vue请添加图片描述

配置器开发

基于 key path的动态表单状态管理:vee-validate

  • components
    • AppRightPanel
      • AppRightPanel.vue - 基础架子
        使用策略模式渲染右侧栏的
        <component :is=“blockSetting” :blockInfo=“currentBlockInfo”></component>
        blockSetting: quote->QuoteSetting,chart->ChartSetting

      • QuoteSetting.vue

        • import {useFieldArray,useForm} from ‘vee-validate’ - 注册useForm
        • useForm->initialValue->content 注入内容
        • defineInputBinds - 跟当下的,具体的内容做双向绑定
        • watch检测values做到跟页面中数据实时更新
        • useFieldArray(‘block’) - 获取fields,push两个方法;按钮直接调用push即可追加quote请添加图片描述

react中类似:react-hook-form (建议) 或者 formik

对于动态表单的技术选型 为什么选用VeeValidate?
1.设计理念比较好 基于hooks实现的/CompositionAPI实现的,能够解决很多事情,例如,表单类型校验规则,动态表单,表单间联动,统一的表单状态处理等等
2.开源,有人维护

不管是useForm,还是自己去封装表单,表格的插件,都需要将UI层(组件)和状态层(CompositionAPI负责产出的状态数据)分离,在用的地方,使用useForm,useTable等等解构出来
保证数据逻辑和UI逻辑之间解耦

如果组件多了,渲染引擎变得慢或卡,一家公司的商城,首页用了无代码平台来搭建,首页要等一会才出来,这个如何解决?
使用代码分割来解决。在router层就可以做封装,使用defineAsyncComponent动态模块导入,入口将依赖作为标记,接下来内容就会通过动态导入方式来切分掉代码片段,生成新的trunk,通过trunk来处理;所以,如果首页很卡,首页加载资源非常多,将首页不加载的资源进行切掉,切到另外一个包里,就不会加载那么多内容了,等用到这部分内容时候,动态去加载。

  • 首页加载优化
  • 1.5s,静态资源(chunk【cachegroup 硬缓存】、dynamic import)
  • cdn、gzip
  • http2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/832610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决github的remote rejected|git存储库的推送保护

前言 git存储库的推送保护。当你试图推送代码到GitHub仓库时&#xff0c;由于存在与主分支&#xff08;master&#xff09;相关的仓库规则违规行为&#xff0c;推送会被拒绝了。这种保护机制帮助确保只有经过授权和符合规定的代码才能被合并到主分支&#xff0c;从而保护了主分…

Unreal Engine插件打包技巧

打开UE工程&#xff0c;点击编辑&#xff0c;选择插件&#xff0c;点击"打包"按钮&#xff0c;选择输出目录UE4.26版本打包提示需要VS2017问题解决 1&#xff09;用记事本打开文件【UE4对应版本安装目录\Epic Games\UE_4.26\Engine\Build\BatchFiles\RunUAT.bat】 2&…

Linux网络部分——DNS域名解析服务

目录 1. 域名结构 2. 系统根据域名查找IP地址的过程 3.DNS域名解析方式 4.DNS域名解析的工作原理【☆】 5.域名解析查询方式 6.搭建主从DNS域名服务器 ①初始化操作主服务器和从服务器&#xff0c;安装BIND软件 ②修改主服务器的主配置文件、区域配置文件、区域数…

pyside6的调色板QPalette的简单应用

使用调色板需要先导入:from PySide6.QtGui import QPalette 调色板QPalette的源代码&#xff1a; class QPalette(Shiboken.Object):class ColorGroup(enum.Enum):Active : QPalette.ColorGroup ... # 0x0Normal : QPalette.ColorGrou…

鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据

基本概念 队列又称消息队列&#xff0c;是一种常用于任务间通信的数据结构。队列接收来自任务或中断的不固定长度消息&#xff0c;并根据不同的接口确定传递的消息是否存放在队列空间中。 任务能够从队列里面读取消息&#xff0c;当队列中的消息为空时&#xff0c;挂起读取任务…

文献速递:深度学习医学影像心脏疾病检测与诊断--从SPECT/CT衰减图中深度学习冠状动脉钙化评分提高了对重大不良心脏事件的预测

Title 题目 Deep Learning Coronary Artery Calcium Scores from SPECT/CT Attenuation Maps Improve Prediction of Major Adverse Cardiac Events 从SPECT/CT衰减图中深度学习冠状动脉钙化评分提高了对重大不良心脏事件的预测 01 文献速递介绍 低剂量非门控CT衰减校正&am…

java之web笔记

1.Servlet技术 1.1 JavaWeb概述 在Sun的Java Servlet规范中&#xff0c;对Java Web应用作了这样定义:“JavaWeb应用由一组Servlet、HTML页、类、以及其它可以被绑定的资源构成。它可以在各种供应商提供的实现Servlet规范的Servlet容器中运行。 Java Web应用中可以包含如下内容…

智能AI摄像头项目

项目概要 硬件说明&#xff1a;易百纳rv1126 38板&#xff0c;易百纳GC2053摄像头&#xff0c;拓展版&#xff08;自绘&#xff09;&#xff0c;屏幕驱动板&#xff08;自绘&#xff09;&#xff0c;3.1inch mipi屏&#xff0c;FT5316触摸屏 开发环境 硬件分析 开发环境及sd…

语音识别---节拍器

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

深度神经网络中的不确定性研究综述

A.单一确定性方法 对于确定性神经网络&#xff0c;参数是确定的&#xff0c;每次向前传递的重复都会产生相同的结果。对于不确定性量化的单一确定性网络方法&#xff0c;我们总结了在确定性网络中基于单一正向传递计算预测y *的不确定性的所有方法。在文献中&#xff0c;可以找…

Scratch编程v3.29.1少儿编程工具

软件介绍 SCRATCH是一款由麻省理工学院&#xff08;MIT&#xff09;媒体实验室开发的图形化编程语言和集成开发环境&#xff08;IDE&#xff09;。它的目标是让编程变得有趣、直观且易学&#xff0c;尤其是针对儿童和青少年群体。通过SCRATCH&#xff0c;用户可以通过拖放代码…

Al加码,引爆“躺平式”旅游 | 最新快讯

旅游业正迎来新的技术浪潮。 文&#xff5c;锌刻度&#xff0c;作者&#xff5c;孟会缘&#xff0c;编辑&#xff5c;李季 今年的五一&#xff0c;“微度假”“微旅行”纷纷出圈。 相较于三亚、云南等老牌旅游大热门&#xff0c;人们开始寻找一些不用“人挤人”的小众旅行目的…

第一天学习(GPT)

1.图片和语义是如何映射的&#xff1f; **Dalle2&#xff1a;**首先会对图片和语义进行预训练&#xff0c;将二者向量存储起来&#xff0c;然后将语义的vector向量转成图片的向量&#xff0c;然后基于这个图片往回反向映射&#xff08;Diffusion&#xff09;——>根据这段描…

Ps 中 曲线和色阶的区别在哪里?

【官方解释】 在Photoshop中&#xff0c;曲线&#xff08;Curves&#xff09;和色阶&#xff08;Levels&#xff09;是两种调整图像色调和对比度的工具&#xff0c;它们有一些相似之处&#xff0c;但也有一些重要的区别。 调整方式: 曲线&#xff08;Curves&#xff09;&…

激发创新活力,泸州老窖锻造人才“铁军”(内附长江酒道短评)

执笔 | 姜 姜 编辑 | 古利特 刚刚站上300亿元新台阶&#xff0c;泸州老窖再次传来喜讯。 <<<左右滑动查看更多>>> 4月28日&#xff0c;四川省庆祝“五一”国际劳动节大会在成都召开。泸州老窖股份有限公司工业4.0项目秘书长赵丙坤、泸州老窖酿酒有限责任公…

测试环境搭建:JDK+Tomcat+Mysql+Redis

基础的测试环境搭建&#xff1a; LAMPLinux(CentOS、ubuntu、redhat)ApacheMysqlPHP LTMJLinux(CentOS、ubuntu、redhat)TomcatMysql(Oracle)RedisJava 真实的测试环境搭建&#xff1a;&#xff08;企业真实的运维&#xff09; 基于SpringBoot&#xff08;SpringCloud分布式微…

SpringMVC响应数据

三、SpringMVC响应数据 3.1 handler方法分析 理解handler方法的作用和组成&#xff1a; /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为handler* TODO: handler需要使用RequestMapping/GetMapping系列,声明路径,在HandlerMapping中注册,供DS查找!* TODO: ha…

d3dcompiler_47.dll缺失怎么修复?,修复d3dcompiler_47.dll文件缺失的详细教程

d3dcompiler_47.dll缺失怎么修复&#xff1f;遇到这样的问题是不是不知道怎么办&#xff1f;如果你不知道该怎么办&#xff0c;那么小编这篇文章将教大家如何去解决d3dcompiler_47.dll文件缺失。 方法1&#xff1a;下载并安装d3dcompiler_47.dll文件 当出现找不到d3dcompiler_…

5月6号作业

申请该结构体数组&#xff0c;容量为5&#xff0c;初始化5个学生的信息 使用fprintf将数组中的5个学生信息&#xff0c;保存到文件中去 下一次程序运行的时候&#xff0c;使用fscanf&#xff0c;将文件中的5个学生信息&#xff0c;写入(加载)到数组中去&#xff0c;并直接输出学…

MySQL基础_5.多表查询

文章目录 一、多表连接1.1、笛卡尔积&#xff08;或交叉连接&#xff09; 二、多表查询&#xff08;SQL99语法&#xff09;2.1、内连接(INNER JOIN)2.2、内连接(INNER JOIN) 一、多表连接 多表查询&#xff0c;也称为关联查询&#xff0c;指两个或更多个表一起完成查询操作。 …