如何降到最低封装形式达到简单化启用目地

lxf2023-03-08 18:27:01

引言

坚信用Vue架构多的是朋友们对弹出窗口的所使用的难题都有一些应用里的抨击,这轮关键论述对于组件封装不合逻辑撰写,怎样降到最低封装形式达到简单化启用目地。

剖析

常规Vue前面UI组件如elment-uiIviewAnt Design Vue等UI组件库对于多形式窗户的封装形式基本上都是套筒式的,MVVM大伙儿基本都是在提,从另外一个角度而言Dialog封装形式在实际应用上,弹出窗口太多满天的自变量怎样解决,我们可以把temlplate里面的内容解读为表现层,script解读为逻辑层,尽管克服了数据库的关联难题,但说实在的,vue的逻辑层和表现层相互之间交叉应用还是比较存在一些难题,或许你会提Vue还支持Jsx书写,装上软件也能实现React的书写和质量,这时我用多形式窗户的事例来阐述一些问题

  1. elment-ui 如何降到最低封装形式达到简单化启用目地
  2. Iview 如何降到最低封装形式达到简单化启用目地
  3. Ant Design Vue 如何降到最低封装形式达到简单化启用目地 我们在实践过程中,完成这样一个简单操作,点一下清单->弹出窗口表格信息内容->明确启用信息存储插口 这一过程如一个业务操作中有许多的编辑弹出窗口,或是储存逻辑性必须衔接性,也有区别会平白无故促使一个解决变得特别杂乱繁杂。 如何降到最低封装形式达到简单化启用目地 能够看见一个弹出窗口,假如拓展3个data自变量,2个方式。若是有10个弹出窗口,那样也变可能多出来310个特性和210种方法。 我们针对弹出窗口的启用习惯性更偏重于layer和react这类随时随地拿取的书写 如何降到最低封装形式达到简单化启用目地 问题来了,vue尽管称为适用jsx书写如下图所示,但是却也会失去有着当前页特性方式互通的一部分权利,理论上讲,本身就是函数式部件甚至于后来都趋于的钩子函数或者叫组合型,其实质其实就是前后文的分享。 如何降到最低封装形式达到简单化启用目地

提升方法

假如融合vue特性,要合拼属性和方法,必定要封装形式多形式窗为部件,但表明确定,并不是一个链构造,从而就必须要实现一个调整,但调整这类书写,通常是需在部件中进行一些承诺,毕竟现在在Promise猖狂另加aysnc await 去JQ时期链条式摧残前提下,通俗点说,异步调用但选用同歩书写。 如果将Promise比成 "进程" 那我们就要一个生产调度,去控制在点一下 “确定” 时完毕。

  • deferred目标便是jQuery的调用函数解决方法,$.Deferred 帮我带来了构思,就是把promise对象reject和resolve对外开放出去
function generateDeferredPromise() {
return (() => {
  let resolve;
  let reject;
  let p = new Promise((res, rej) => {
    resolve = res;
    reject = rej;
  });

  return {
    promise: p,
    reject,
    resolve
  };
})();
}
  • 完整的多形式窗封装形式如下所示,能够看见大家在show时返回promise目标,在确定的情况下触动了调整
<template>
 <el-dialog 
 :title="title" 
 :visible.sync="drawer">
       <slot />
<div slot="footer" class="dialog-footer">
   <el-button @click="drawer = false">取 消</el-button>
   <el-button type="primary" @click="saveData">确 定</el-button>
</div>
</el-dialog>
</template>

<script>

function generateDeferredPromise() {
 return (() => {
   let resolve;
   let reject;
   let p = new Promise((res, rej) => {
     resolve = res;
     reject = rej;
   });

   return {
     promise: p,
     reject,
     resolve
   };
 })();
}
export default {
 name:'modal',
 props: {
   title: {
     type: String,
     default: undefined,
   },
   handle:{
       type:Function,
       default:(res)=>{},
   }
 },
   data() {
     return {
       drawer: false,
       promise:null,
     }
   },
   mounted() {
       if(this.handle){
           this.handle(this);
       }
   },
   methods: {
     show() {
       this.drawer = true
       this.promise=new generateDeferredPromise();
       return this.promise.promise;
     },
     saveData(){
       this.promise.resolve();
       this.promise.promise.then(()=>{
         this.drawer=false;
       })
     }
   }
}
</script>

<style>

</style>
  • 启用时如下所示,能够轻轻松松的变向达到函数式编程的特征,在启用时减掉了2个特性和一个方法,10个弹出窗口由原先的30 20个减小为20。
   <modal title="审核/意见反馈" ref="modal">
    <el-descriptions :model="audit"  class="margin-top"  :column="1"  border>
      <el-descriptions-item label="建议">
         <el-radio-group v-model="audit.state">
     <el-radio  :label="true">根据</el-radio>
     <el-radio  :label="false">未通过</el-radio>
   </el-radio-group>
      </el-descriptions-item>
      <el-descriptions-item label="具体内容">
         <el-input type="textarea" v-model="audit.comment"></el-input>
      </el-descriptions-item>
    </el-descriptions>
</modal>
async handleAudit(row) {
     const { show } = this.$refs["modal"] || {};
     show().then(async () => {
      //储存逻辑性解决
     });
   },

汇总

  • 实质实际上此次共享页并没许多创意,这类引入式封装形式,也有很多人早就想起了,只不过是觉得对于弹出窗口这方面的封装形式,许多离开了极端化,要么追求完美layer那类书写适配习惯性,要不索性或是保存原状,就做一些特别处理,特性或是原状保存了。
  • 对于调整,我以前尽管使用过一段,但是感觉不小心习惯性,由于不经意有一个分享弹出窗口存有核实后逻辑性不同的问题帮我导致了困惑,感觉书写有点超级变态,因而做了一些试着和延伸,感觉算是比较良性一个启用方法吧。
  • 架构性的东西,我惊讶的是,基础理论性的东西,一个比一个探的深,但牵涉到便利性,很少有人去研究,甚至于架构性的东西除开UI和风格迥异,书写也如出一辙。

文中已经参与「 . 」