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://xiahunao.cn/news/3014797.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【3D目标检测】常见相关指标说明

一、mAP指标 mean Average Precision&#xff08;平均精度均值&#xff09;&#xff0c;它是目标检测和信息检索等任务中的重要性能指标。mAP 通过综合考虑精度和召回率来衡量模型的总体性能。 1.1 精度&#xff08;Precision&#xff09; 表示检索到的目标中实际为正确目标…

深度学习之基于Vgg16卷积神经网络乳腺癌诊断系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于VGG16卷积神经网络的乳腺癌诊断系统项目是一个结合深度学习技术和医学图像处理的创新项目&#xff0c;旨在提高…

Golang | Leetcode Golang题解之第67题二进制求和

题目&#xff1a; 题解&#xff1a; func addBinary(a string, b string) string {ans : ""carry : 0lenA, lenB : len(a), len(b)n : max(lenA, lenB)for i : 0; i < n; i {if i < lenA {carry int(a[lenA-i-1] - 0)}if i < lenB {carry int(b[lenB-i-1…

vue3—win7搭建vue3环境

背景 vue3环境要求node.js18.3及以上版本&#xff0c;所以我们需要安装更高版本node.js&#xff0c;然而win7无法支持高版本node.js。下面我介绍一种安装方法。 步骤 1、下载 node-v13.14.0-x64.msi 安装&#xff0c;默认安装即可。安装完成后&#xff0c;进入cmd&#xff0c…

勾股定理 口诀

def t_o(a):t int(a/2)b t*t-1c t*t1f (a*ab*bc*c)print(f,ou,a,b,c,a*ab*b,c*c)def t_j(a):t a*abint(t/2)c t-bf (a*ab*bc*c)print(f,j-,a,b,c,f,a*ab*b,c*c)for i in range(2,100,2):t_o(i)t_j(i1) 奇数平方写连续 偶数半方加减一

引入OSS

前置条件 AccessKey 引入依赖 都是官网上的&#xff1a;https://help.aliyun.com/zh/oss/developer-reference/java-installation?spma2c4g.11186623.0.i16 <!--若是创建项目的时候这个依赖勾选了就不用了--><!--不加启动会报错No active profile set, falling back…

JETBRAINS IDES 分享一个2099通用试用码!IDEA 2024 版 ,支持一键升级

文章目录 废话不多说上教程&#xff1a;&#xff08;动画教程 图文教程&#xff09;一、动画教程激活 与 升级&#xff08;至最新版本&#xff09; 二、图文教程 &#xff08;推荐&#xff09;Stage 1.下载安装 toolbox-app&#xff08;全家桶管理工具&#xff09;Stage 2 : 下…

Python深度学习基于Tensorflow(4)Tensorflow 数据处理和数据可视化

文章目录 构建Tensorflow.data数据集TFRecord数据底层生成TFRecord文件数据读取TFRecord文件数据图像增强 数据可视化 构建Tensorflow.data数据集 tf.data.Dataset表示一串元素&#xff08;element&#xff09;&#xff0c;其中每个元素包含一个或多个Tensor对象。例如&#xf…

公钥私钥?一文搞懂非对称加密

非对称加密 非对称加密&#xff1a; 通信双方分别创建公钥和私钥&#xff0c;并且保证公钥所加密的信息&#xff0c;只有配对的私钥可以解密&#xff0c;接下来&#xff0c;双方公开交换公钥&#xff0c;通信时&#xff0c;使用对方的公钥进行加密&#xff0c;如此&#xff0…

PCB仿真:如何模拟PCB设计

当有人在学习如何驾驶汽车时,驾校老师会在模拟器上对他们进行培训,然后教他们如何在路上驾驶真正的汽车。在制造或使用产品或机器之前了解或测试其行为总是很好的。这样可以知道产品的外观和行为,如果它没有按照期望工作,总是可以做出改变。当不当操作的成本很高时,实际控…

ASP.NET MVC(三) 路由问题(一)

如果是int数据类型不传递id&#xff0c;则会报错&#xff0c;可以改成string id

电脑(爱好者) :基础知识1 了解你的电脑

读懂cpu 您想了解关于您的电脑的信息吗&#xff1f;CPuz是一款常用的系统信息工具&#xff0c;可以提供关于CPU、主板、内存等硬件信息的详细情况。您可以下载并运行该软件&#xff0c;然后查看您的电脑硬件配置信息。 图片来源于网络 CPU-Z 简介 CPU-Z 是一款功能强大且易于使…

flask网站开发计划

我想写一个flask开发网站的合集文章&#xff0c;该网站主要是采集网络上的文章&#xff08;不同站点&#xff0c;用Python识别出正文内容&#xff09;&#xff0c;然后做成长图形式&#xff0c;发布到flask站点&#xff0c;并提供“下载”按钮&#xff0c;点击下载按钮&#xf…

python-正则表达试-实践1

匹配html标签中的任意标签内数据 匹配所有包含’oo’的单词 import re text "JGood is a handsome boy, he is cool, clever, and so on..." re.findall(r\w*oo\w*, text) 匹配 html中title里面的内容 原文&#xff1a; import re file r./202304.html f open(…

Java设计模式 _结构型模式_享元模式

一、享元模式 1、享元模式 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型模式。主要用于减少创建对象的数量&#xff0c;以减少内存占用和提高性能。主要解决有大量对象时&#xff0c;有可能会造成内存溢出&#xff0c;我们把其中共同的部分抽象出来&#x…

洛谷 P3391:文艺平衡树 ← Splay树模板题

【题目来源】https://www.luogu.com.cn/problem/P3391【题目描述】 您需要写一种数据结构&#xff08;可参考题目标题&#xff09;&#xff0c;来维护一个有序数列。 其中需要提供以下操作&#xff1a;翻转一个区间&#xff0c;例如原有序序列是 5 4 3 2 1&#xff0c;翻转区间…

录屏软件哪个好用?这4款不容错过!

在现代社会中&#xff0c;信息的传递和分享变得越来越重要。一个好的录屏软件能够帮助我们将想要分享的信息快速直观地展示给他人。 通过下文推荐的4款录屏软件&#xff0c;我们可以轻松地分享自己的知识、经验和见解&#xff0c;让更多的人受益。 方法一&#xff1a;QQ软件进…

创意自我介绍视频制作软件有哪些?

创意自我介绍视频制作软件 在制作创意自我介绍视频时&#xff0c;有许多软件可供选择。以下是一些推荐的软件&#xff1a; 乐秀视频剪辑&#xff1a;这是一个被8亿用户选择的视频剪辑、视频制作与Vlog剪辑工具。它提供了丰富的视频编辑功能&#xff0c;帮助用户制作出高质量的…

Android iw 工具

代码位置:Android/external/iw 查看支持的命令: console:/ # iw help Usage: iw [options] command Options:--debug enable netlink debugging--version show version (4.1) Commands:help [command]Print usage for all or a specific command, e.g."…

长难句打卡5.7

In December 2010 America’s Federal Trade Commission (FTC) proposed adding a “do not track” (DNT) option to Internet browsers, so that users could tell advertisers that they did not want to be followed. 2010年12月&#xff0c;美国美国联邦贸易委员会(FTC)提…