你好,谈一下自己的经验吧。

组件是一种对界面逻辑进行的抽象,本质上还是对代码的封装,目的是节约代码量,提升工作效率。所以判断某两个组件的子组件是否应该设计成一个统一的,需要思考一下,两个子组件的业务相似率有多高。

在vue下,组件的核心是vModel,methods只是对vModel的修改,而template只是将vModel转换为界面。只要两个子组件的vModel能大致统一,我们就可以把它封装成同一个组件,并提供不同的api给外部使用即可。

我举个我自己项目的例子

一个项目里,表单一定是一个重现率很高的场景。作为一个较大的项目,一定要考虑如何将表单抽象出来,可以换来开发效率的极大提升。但是具体要抽象到什么程度,要看具体场景。

比如我们的移动端项目,在全国有20多个不同版本,具有相似但不同的业务,且各省业务本身还在不断增加,差异会越来越大,无法将项目本身产品化。经观察,业务本身虽然无法被产品化,但是开发环境是可以做到的。所以我们的解决方案就是将界面数据化,由服务端直接配置数据,在前端渲染出完整界面。这个在vue下是很容易实现的

比如我们描述一个简单的界面,他具有一个form,一个tab组件,下边4个tab,各是 一个数据列表,一个图片列表,一个图表,一个处理流程,那我们就可以用数据将界面描述出来

{

form : {

action="xxxx.url",

....

},

tabs : [

{type:"listview",data:[...]} ,

{type:"photoview",data:[...]} ,

{type:"chart",data:[...]} ,

{type:"flow",data:[...]}

]

}

将其作为一个约定,我们前端通过数据就知道应该调用哪些组件对界面进行渲染了。

说回表单,各种表单项的vModel是基本一致的,关键的属性大家都有 ,如:label,name,value,validate。那我们就可以将其抽象为一个配置,再实现为一个统一的组件。

以下是我的表单配置,基本上已经描述了普通表单应该有的功能:

[

{

"name":"orderKey",

"label":"排序",

"type":"radio",

"value":"v1",

"valid" : "required|range(7,10)|async('/xxxx/xxxx.action')",

"options" : [

{value:"v1",label:"v1"},

{value:"v2",label:"v2"},

{value:"v3",label:"v3"}

]

},

{

"name":"MainSn",

"label":"业务号码",

"show" : "form.orderKey==='v1'",

"valid" : "required|range(7,8)",

"type":"text",

"value" : "xxxx"

},

{

"name":"MainSn3",

"label":"禁用",

"type":"select",

"disabled" : true,

"value" : "xxxx",

"options" : [

{value:"xxxx",label:"xxxxx"},

{value:"xxxx",label:"xxxxx"}

]

},

{

"name":"range1",

"label":"range1",

"disabled" : true,

"prefix" : "%",

"value" : 60,

"type":"range"

}

]

可见配置基本上相似率很高,select和radio的配置几乎是一模一样的,但是实际显示效果却相差很大

动手设计前,我们要考虑:它有一个props,以接收表单项配置。然后需要有一个手段将表单产生的结果返回给父组件使用。按现在主流方式,子组件向父组件输送信息,一般是采用vuex等解决方案,我这里由于实际考虑,采用的方式是 子组件接收一个消息,在消息回调中输出表单结果。

由于我们的表单配置有多个配置项,那么我们下一步就要遍历配置项并生成UI,大致是这个样子

下一步,我们只需要根据表单项不同,为其编写不同的交互就行了。

之后我们要取回用户输入的结果

表单提供两个方法,

第一个是个同步方法,不经验证直接返回表单数据

第二个方法是验证表单,如成功,返回表单数据。如验证失败,返回验证信息。这里由于表单验证有成功失败两个状态,且验证项有可能是异步的,所以使用了promise。

布局不同的问题,以上已经解答了,数据不同,要看看能否在传入组件前尽量将其统一。

vue可以多次导入吗_vue组件怎么复用,比如有abc三个组件,b是可复用组件,引入到a和c中,但是怎么才能在a和c中的数?...相关推荐

  1. vue可以多次导入吗_vue中同一个页面多次使用同一个组件的相互干扰问题

    我们知道,vue有一个重要的理念就是组件化,即将重复使用的功能点抽提出来作为组件,需要使用的页面只需要引用该组件即可得到相应的功能点. 而组件化的一个重要特性就是作用域隔离,即一个组件实例拥有一个私有 ...

  2. vue表单中批量导入功能_vue实战(11)——vue+element UI实现表格数据导出Excel功能

    一.应用场景 按照需求导出功能分为勾选批量导出及按照查询结果导出,考虑到接口操作导出的复杂性,因此实现了js控制导出的功能 导出功能截图 二.安装相关依赖 cnpm install --save xl ...

  3. vue 点击div 获取位置_Vue中组件之间8种通信方式,值得收藏

    之前写了一篇关于vue面试总结的文章, 有不少网友提出组件之间通信方式还有很多, 这篇文章便是专门总结组件之间通信的 vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么 ...

  4. vue中在当前组件中定义的全局变量怎么在methods中使用_Vue原理解析(十):搞懂事件API原理及在组件库中的妙用...

    在vue内部初始化时会为每个组件实例挂载一个this._events私有的空对象属性: vm._events = Object.create(null) // 没有__proto__属性 这个里面存放 ...

  5. axure日期选择器组件_Vue原理解析(十):搞懂事件API原理及在组件库中的妙用

    在vue内部初始化时会为每个组件实例挂载一个this._events私有的空对象属性: vm._events = Object.create(null) // 没有__proto__属性 这个里面存放 ...

  6. vue 如何控制组件初始与销毁_vue组件什么条件下需要摧毁?

    Vue 是数据驱动的MVVM框架,所以上来你思考的是如何组织你的数据. v-if与组件的自动销毁 在文档中有这样一句话,v-if会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建. 如果 ...

  7. vue的method函数互引用_vue 在methods中调用mounted的实现操作

    vue 在methods中调用mounted的实现操作 首先可以在data中先声明一个变量 比如 sureDelBox : ' ' mounted 中 ---> methods 中 ---> ...

  8. vue路由重定向到登录页面_Vue 组件单元测试究竟测试什么?

    作者简介: 李中凯 八年多工作经验 前端负责人, 擅长JavaScript/Vue. 掘金文章专栏:KaysonLi 的个人主页 - 专栏 - 掘金 关于 Vue 组件单元测试最常见的问题就是&quo ...

  9. vue 获取url地址的参数_Vue之vuerouter的使用

    1. 什么是vue-router? 所谓的vue-router, 通俗的来讲 就是路由 但是这个和后端路由是不同的, 这是前端路由,是url和单页面组件的对应关系, 也就是SPA(单页应用)的路径管理 ...

最新文章

  1. 异常检测算( OneClassSVM、EllipticEnvelope、IsolationForest、LocalOutlierFactor)法比较,基于四个仿真数据集
  2. 安装 Thonny 软件环境开发PI Pico
  3. PC Lint 初学
  4. 2008年初看的书[带简评]
  5. webservice-WebService试题
  6. Leaflef笔记-使用leaflet-tilelayer-wmts插件获取地图及坐标(含错误分析思路)
  7. JavaScript tip
  8. 【Java面试题】40 你所知道的集合类都有哪些?主要方法?
  9. win10如何与终端电脑连接服务器,教程 | Windows 10 下在命令行窗口使用 ssh 连接服务器...
  10. 如何在不知道密码的情况下卸载趋势防毒墙网络版
  11. 对话系统 | (4) 任务型对话系统基础
  12. 离散数学 06.04 子群及其陪集
  13. 深度学习为什么会出现validation accuracy大于train accuracy的现象?
  14. k8s中对pod设置限制只设置了limits
  15. webpack bable
  16. 靶机、软件搭建:05---Burp Suite工具的安装与使用(Windows环境)
  17. win10下启动.bat文件闪退问题
  18. 【ESP32】【乐鑫发布 AI 语音麦克风阵列开发板 ESP32-Korvo】
  19. 形容词记忆(一):able, ible后缀常用词
  20. 绿盟python测试实习面试

热门文章

  1. 如何配置openjdk的 java home
  2. ToolTip C#
  3. php过滤处理手机自带Emoji表情
  4. 【小超_Android】GitHub源码项目整理,希望对大家有帮助
  5. windows 2012 powershell 创建Ad
  6. Ubuntu 安装 Redis
  7. php http 断点续传
  8. Transfer: 99款高质量免费(X)HTML/CSS模板
  9. Linux RedHat 5.2 mySQL和Apache协同
  10. bzoj4009: [HNOI2015]接水果(整体二分)