vue装饰器写法,vue3 装饰器

  vue装饰器写法,vue3 装饰器

  Decorator是一种与类相关的语法糖,用于封装或修改类或类的方法。实际上,decorator是decorator模式在设计模式中的一种实现。下面这篇文章主要介绍在Vue中使用decorator的相关信息,有需要的朋友可以参考一下。

  

目录

  前言什么是装修工?decorator的使用:js中使用decorator,vue中不使用decorator,一些常用的decorators 1。功能节流防抖2。正在加载3。确认框摘要

  

前言

  我相信你一定已经满足了开发中第二个弹框确认的相关需求。不管你用的是UI框架的二级弹性框架组件,还是自己打包的弹性框架组件。无法避免多次使用时出现大量重码的问题。这些代码的积累导致项目可读性差。项目的代码质量也变得很差。那么我们如何解决第二个子弹盒的代码重复问题呢?使用装饰器

  

什么是装饰器?

  Decorator是ES7的新语法。Decorator修饰类、对象、方法和属性。给它添加一些其他的行为。通俗地说,就是对一段代码的二次包装。

  

装饰器的使用

  方法简单。我们定义一个函数。

  const decorator=(目标,名称,描述符)={

  var oldValue=descriptor.value

  descriptor.value=function(){

  警报(哈哈)

  return oldValue.apply(this,参数)

  }

  返回描述符

  }

  //然后直接@decorator到函数,类或者对象。

  装饰器的目的是重用代码。我们先来看一个小例子。

  

js中使用装饰器

  //定义装饰器

  常量日志=(目标,名称,描述符)={

  var oldValue=descriptor.value

  descriptor.value=function() {

  console.log(`调用${name} with `,arguments);

  返回oldValue.apply(this,arguments);

  };

  返回描述符;

  }

  //计算类

  类计算{

  //使用装饰器

  @log()

  函数减法(a,b){

  返回a - b

  }

  }

  const operate=new Calculate()

  运算.减法(5,2)

  

不使用装饰器

  常量日志=(函数)={

  if(typeof(func)!==函数){

  抛出新错误(`参数必须是函数`);

  }

  返回(.参数)={

  console . info(` $ { func . name } invoke with $ { arguments . join(,)} `);

  func(.论据);

  }

  }

  常数减法=(a,b)=a b;

  const subtractionLog=log(减法);

  减法对数(10,3);

  这样,你会发现使用装饰器后,代码的可读性变得更强了。Decorator不关心你内部代码的实现。

  

vue 中使用装饰器

  如果您的项目是使用vue-cli构建的,并且vue-cli的版本高于2.5,则无需任何配置即可使用。如果您的项目也包含eslit,那么您需要在eslit中打开与支持decorators相关的语法检查。

  //在eslintignore中添加或修改以下代码:

  语法分析选项:{

  ECM功能:{

  //支持装饰器

  legacyDecorators: true

  }

  }

  添加这段代码后,eslit支持decorator语法。

  通常在项目中,我们经常使用第二个项目符号框来删除:

  //decorator.js

  //假设项目中已经安装了element-ui

  从“元素-用户界面”导入{ MessageBox,Message }

  /**

  *确认框

  * @ param { String } title-标题

  * @ param { String } content-内容

  * @ param { string } Confirm button Text-确认按钮名称

  * @param {Function}回调-确认按钮名称

  * @返回

  **/

  功能确认(标题、内容、确认按钮文本=确定){

  返回函数(目标,名称,描述符){

  const originValue=descriptor . value

  descriptor.value=函数(.args) {

  MessageBox.confirm(内容,标题,{

  dangerouslyUseHTMLString: true,

  distinguishCancelAndClose: true,

  确认按钮文本:确认按钮文本

  }).然后(originValue.bind(这个,args))。catch(错误={

  if(error=== close error=== cancel ){

  Message.info(用户取消了操作))

  }否则{

  Message.info(错误)

  }

  })

  }

  返回描述符

  }

  }

  如上面的代码所示,在确认方法中执行了element-ui中的MessageBox组件。当用户取消时,消息组件将提示用户取消操作。

  让我们用装饰器来装饰test()方法。

  从 @/util/decorator 导入{ confirm }

  导入axios表单 axios

  导出默认值{

  名称:“测试”,

  data(){

  返回{

  戴尔列表:“/商家/商店列表/委托商店”

  }

  }

  },

  方法:{

  @confirm(删除商店,确定要删除商店吗?)

  测试(id){

  const {res,data}=axios.post(this.delList,{id})

  If (res.rspcd== 0000) this。$ message.info(操作成功!)

  }

  }

  此时,用户点击一个商店来删除它。装修工会干活。如下图所示:

  当我单击取消时:

  温馨提示:用户取消了操作.被修饰的test方法不会执行

  当我们单击“确定”时:

  调用接口,弹出消息。

  

一些常用的装饰器

  下面小编列举了几个小编在工程中常用的装饰,方便大家参考。

  

1. 函数节流与防抖

  功能节流和防抖的应用场景相当广泛。一般要调用的函数都是用throttle或者去抖方法打包的。现在,这两个功能都可以用上面提到的内容打包成decorators。防抖节流使用lodash提供的方法,你也可以自己实现节流防抖功能。

  从“lodash”导入{ throttle,debounce }

  /**

  *函数节流装饰器

  * @ param {number}毫秒的等待限制

  * @param {Object}选项节流选项对象

  *[options . leading=true](boolean):指定在限制开始之前调用。

  *[options . trailing=true](boolean):指定限制后调用。

  */

  export const throttle=function(wait,options={}) {

  返回函数(目标,名称,描述符){

  descriptor . value=throttle(descriptor . value,等待,选项)

  }

  }

  /**

  *功能防抖装饰器

  * @ param {number}等待的毫秒数。

  * @param {Object} options选项对象

  *[options . leading=false](boolean):指定在延迟开始之前调用。

  * [options.maxWait] (number):设置func允许延迟的最大值。

  *[options . trailing=true](boolean):指定在延迟结束后调用。

  */

  export const de bounce=function(wait,options={}) {

  返回函数(目标,名称,描述符){

  descriptor . value=de bounce(descriptor . value,wait,options)

  }

  }

  封装后,在程序集中使用它。

  从“@/decorator”导入{去反跳}

  导出默认值{

  方法:{

  @去抖(100)

  调整大小(){}

  }

  }

  

2. loading

  在加载数据时,为了给每个用户一个友好的提示,防止用户继续操作,通常会在请求前显示一个加载,请求结束后关闭加载,一般写为

  导出默认值{

  方法:{

  异步getData() {

  const loading=Toast.loading()

  尝试{

  const data=await loadData()

  //其他操作

  }catch(错误){

  //异常处理

  Toast.fail(加载失败);

  }最后{

  loading.clear()

  }

  }

  }

  }

  我们可以使用decorator重新打包上面的加载逻辑,如下面的代码所示

  从“vant”导入{ Toast }

  /**

  *加载装饰器

  * @param {*}消息提示信息

  * @param {function} errorFn异常处理逻辑

  */

  export const loading=function(message= loading . ,errorFn=function() {}) {

  返回函数(目标,名称,描述符){

  const fn=描述符.值

  descriptor.value=异步函数(.休息){

  const loading=Toast.loading({

  消息:消息,

  禁止点击:真

  })

  尝试{

  返回await fn.call(this,休息)

  } catch(错误){

  //当调用失败,用户定义了失败的回调函数,就会执行。

  errorFn errorFn.call(this,error,休息)

  console.error(错误)

  }最后{

  loading.clear()

  }

  }

  }

  }

  然后修改上面的组件代码。

  导出默认值{

  方法:{

  @loading (loading )

  异步getData() {

  尝试{

  const data=await loadData()

  //其他操作

  }catch(错误){

  //异常处理

  Toast.fail(加载失败);

  }

  }

  }

  }

  

3. 确认框

  点击删除按钮时,通常需要弹出一个提示框,让用户确认是否删除。这时,常规写法可能是这样的

  从“vant”导入{ Dialog }

  导出默认值{

  方法:{

  deleteData() {

  对话框.确认({

  标题:“提示”,

  消息:“您确定要删除数据吗?此操作无法回滚。

  }).然后(()={

  Console.log(在此删除)

  })

  }

  }

  }

  我们可以提出上面的确认过程来制作一个装饰器,代码如下

  从“vant”导入{ Dialog }

  /**

  *确认提示框装饰器

  * @param {*}消息提示信息

  * @param {*} title标题

  * @param {*} cancelFn取消回调函数。

  */

  导出功能确认(

  Message=您确定要删除数据吗?此操作无法回滚。

  Title=提示,

  cancelFn=function() {}

  ) {

  返回函数(目标,名称,描述符){

  const originFn=descriptor.value

  descriptor.value=异步函数(.休息){

  尝试{

  等待对话框确认({

  消息,

  标题:标题

  })

  originFn.apply(this,rest)

  } catch(错误){

  取消Fn取消Fn(错误)

  }

  }

  }

  }

  然后在使用确认框的时候,可以这样使用。

  导出默认值{

  方法:{

  //可以使用默认参数,而不是传递参数。

  @确认()

  deleteData() {

  Console.log(在此删除)

  }

  }

  }

  不是瞬间简单很多吗?当然,你可以继续包很多装饰品。

  

总结

  Decorator用于重新打包一段代码。在代码中添加一些行为操作和属性。使用装饰器可以大大减少代码重复。增强代码可读性。

  这就是这篇关于在Vue中使用装饰器的文章。关于在Vue中使用decorators的更多信息,请搜索我们以前的文章或者继续浏览下面的相关文章。希望你以后能支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: