iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Vue中怎么使用装饰器
  • 626
分享到

Vue中怎么使用装饰器

2023-06-28 23:06:10 626人浏览 独家记忆
摘要

本篇内容介绍了“Vue中怎么使用装饰器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是装饰器?Decorator是ES7的一个新语法。D

本篇内容介绍了“Vue中怎么使用装饰器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    什么是装饰器?

    Decorator是ES7的一个新语法。Decorator通过对类、对象、方法、属性进行修饰。对其添加一些其他的行为。通俗来说:就是对一段代码进行二次包装。

    装饰器的使用

    使用方法很简单 我们定义一个函数

    const  decorator =  (target, name, descriptor) => { var oldValue = descriptor.value; descriptor.value = function(){    alert('哈哈')    return oldValue.apply(this,agruments)       }  return descriptor}// 然后直接@decorator到函数、类或者对象上即可。

    装饰器的目的旨在对代码进行复用。下面我们先来一个小例子看看

    js中使用装饰器

    //定义一个装饰器 const log = (target, name, descriptor) => {  var oldValue = descriptor.value;  descriptor.value = function() {    console.log(`Calling ${name} with`, arguments);    return oldValue.apply(this, arguments);  };  return descriptor;}   //计算类  class Calculate {     //使用装饰器  @log()   function  subtraction(a,b){     return  a - b   } }  const operate  = new Calculate()  operate.subtraction(5,2)

    不使用装饰器

    const log = (func) => {  if(typeof(func) !== 'function') {    throw new Error(`the param must be a function`);  }  return (...arguments) => {    console.info(`${func.name} invoke with ${arguments.join(',')}`);    func(...arguments);  }}const subtraction = (a, b) => a + b;const subtractionLog = log(subtraction);subtractionLog(10,3);

    这样一对比你会发现使用装饰器后代码的可读性变强了。装饰器并不关心你内部代码的实现。

    vue 中使用装饰器

    如果你的项目是用vue-cli搭建的 并且vue-cli的版本大于2.5 那么你无需进行任何配置即可使用。如果你的项目还包含eslit 那么你需要在eslit中开启支持装饰器相关的语法检测

    //在 eslintignore中添加或者修改如下代码:parserOptions: {    ecmaFeatures:{      // 支持装饰器      legacyDecorators: true    }  }

    加上这段代码之后eslit就支持装饰器语法了。

    通常在项目中我们经常会使用二次弹框进行删除操作:

    //decorator.js//假设项目中已经安装了 element-uiimport { MessageBox, Message } from 'element-ui'export function confirm(title, content, confirmButtonText = '确定') {  return function(target, name, descriptor) {    const originValue = descriptor.value    descriptor.value = function(...args) {      MessageBox.confirm(content, title, {        dangerouslyUsehtmlString: true,        distinguishCancelAndClose: true,        confirmButtonText: confirmButtonText      }).then(originValue.bind(this, ...args)).catch(error => {        if (error === 'close' || error === 'cancel') {          Message.info('用户取消操作'))        } else {          Message.info(error)        }      })    }    return descriptor  }}

    如上代码 confirm方法里执行了一个element-ui中的MessageBox组件 当用户取消时 Message组件会提示用户取消了操作。

    我们在test()方法上用装饰器修饰一下

    import { confirm } from '@/util/decorator'import axiOS fORM 'axios'export default {name:'test',data(){return {  delList: '/merchant/storeList/commitStore'    }  }},methods:{ @confirm('删除门店','请确认是否删除门店?')  test(id){   const {res,data} = axios.post(this.delList,{id})   if(res.rspCd + '' === '00000') this.$message.info('操作成功!')  }}

    此时用户点击某个门店进行删除。装饰器将会起作用。弹出如下图所示:

    Vue中怎么使用装饰器

    当我点击取消时:

    Vue中怎么使用装饰器

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

    当我们点击确定时:

    Vue中怎么使用装饰器

    接口被调用了 并且弹出了message

    一些常用的装饰器

    下面小编罗列了几个小编在项目中常用的几个装饰器,方便大家使用

    1. 函数节流与防抖

    函数节流与防抖应用场景是比较广的,一般使用时候会通过throttle或debounce方法对要调用的函数进行包装,现在就可以使用上文说的内容将这两个函数封装成装饰器, 防抖节流使用的是lodash提供的方法,大家也可以自行实现节流防抖函数哦

    import { throttle, debounce } from 'lodash'export const throttle =  function(wait, options = {}) {  return function(target, name, descriptor) {    descriptor.value = throttle(descriptor.value, wait, options)  }}export const debounce = function(wait, options = {}) {  return function(target, name, descriptor) {    descriptor.value = debounce(descriptor.value, wait, options)  }}

    封装完之后,在组件中使用

    import {debounce} from '@/decorator'export default {  methods:{    @debounce(100)    resize(){}  }}

    2. loading

    在加载数据的时候,为了个用户一个友好的提示,同时防止用户继续操作,一般会在请求前显示一个loading,然后在请求结束之后关掉loading,一般写法如下

    export default {  methods:{    async getData() {      const loading = Toast.loading()      try{        const data = await loadData()        // 其他操作      }catch(error){        // 异常处理        Toast.fail('加载失败');      }finally{        loading.clear()      }      }  }}

    我们可以把上面的loading的逻辑使用装饰器重新封装,如下代码

    import { Toast } from 'vant'export const loading =  function(message = '加载中...', errorFn = function() {}) {  return function(target, name, descriptor) {    const fn = descriptor.value    descriptor.value = async function(...rest) {      const loading = Toast.loading({        message: message,        forbidClick: true      })      try {        return await fn.call(this, ...rest)      } catch (error) {        // 在调用失败,且用户自定义失败的回调函数时,则执行        errorFn && errorFn.call(this, error, ...rest)        console.error(error)      } finally {        loading.clear()      }    }  }}

    然后改造上面的组件代码

    export default {  methods:{    @loading('加载中')    async getData() {      try{        const data = await loadData()        // 其他操作      }catch(error){        // 异常处理        Toast.fail('加载失败');      }      }  }}

    3. 确认框

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

    import { Dialog } from 'vant'export default {  methods: {    deleteData() {      Dialog.confirm({        title: '提示',        message: '确定要删除数据,此操作不可回退。'      }).then(() => {        console.log('在这里做删除操作')      })    }  }}

    我们可以把上面确认的过程提出来做成装饰器,如下代码

    import { Dialog } from 'vant'export function confirm(  message = '确定要删除数据,此操作不可回退。',  title = '提示',  cancelFn = function() {}) {  return function(target, name, descriptor) {    const originFn = descriptor.value    descriptor.value = async function(...rest) {      try {        await Dialog.confirm({          message,          title: title        })        originFn.apply(this, rest)      } catch (error) {        cancelFn && cancelFn(error)      }    }  }}

    然后再使用确认框的时候,就可以这样使用了

    export default {  methods: {    // 可以不传参,使用默认参数    @confirm()    deleteData() {      console.log('在这里做删除操作')    }  }}

    “Vue中怎么使用装饰器”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

    --结束END--

    本文标题: Vue中怎么使用装饰器

    本文链接: https://www.lsjlt.com/news/321398.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Vue中怎么使用装饰器
      本篇内容介绍了“Vue中怎么使用装饰器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是装饰器?Decorator是ES7的一个新语法。D...
      99+
      2023-06-28
    • Vue中如何使用装饰器
      今天就跟大家聊聊有关Vue中如何使用装饰器,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是装饰器装饰器是ES2016提出来的一个提案,当前处于S...
      99+
      2024-04-02
    • Python中怎么使用装饰器装饰函数
      这篇文章将为大家详细讲解有关Python中怎么使用装饰器装饰函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。***个函数deco是装饰函数,它的参数就是被装饰的函数对象。我们可以在deco...
      99+
      2023-06-17
    • Vue中的装饰器如何使用
      小编给大家分享一下Vue中的装饰器如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!相信各位在开发中一定遇到过二次弹框确认相关的需求。不管你使用的是UI框架的...
      99+
      2023-06-29
    • Python中怎么使用装饰器来装饰函数
      在Python中,装饰器是一种函数,它接受一个函数作为参数,并返回一个新的函数。通过使用装饰器,可以在不修改原始函数代码的情况下添加...
      99+
      2024-03-12
      Python
    • python中装饰器怎么使用
      这篇文章给大家分享的是有关python中装饰器怎么使用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、装饰器使用场景经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解...
      99+
      2023-06-15
    • Vue中使用装饰器的方法详解
      目录前言什么是装饰器?装饰器的使用js中使用装饰器不使用装饰器vue 中使用装饰器一些常用的装饰器1. 函数节流与防抖2. loading3. 确认框总结前言 相信各位在开发中一定遇...
      99+
      2024-04-02
    • angular中的@Component装饰器怎么使用
      今天小编给大家分享一下angular中的@Component装饰器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收...
      99+
      2024-04-02
    • 怎么在python中使用函数装饰器
      怎么在python中使用函数装饰器?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研...
      99+
      2023-06-14
    • Python中的装饰器使用
      目录Python装饰器总结Python装饰器 Python的装饰器是个好东西,它能干很多事情。 但对于新手,它看起来似乎没那么简单。 但事实上,装饰器本身也只是个函数。 import...
      99+
      2022-12-19
      Python装饰器使用 装饰器使用 Python装饰器
    • Python装饰器怎么正确使用
      本文小编为大家详细介绍“Python装饰器怎么正确使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python装饰器怎么正确使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。使用环境为: Python 3.6...
      99+
      2023-07-06
    • 怎么在python中使用闭包和装饰器
      本篇文章为大家展示了怎么在python中使用闭包和装饰器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、闭包闭包的形成条件:函数嵌套。内部函数使用了外部函数的变量或者参数。外部函数返回了使用外 部...
      99+
      2023-06-15
    • python怎样使用装饰器
      这篇文章将为大家详细讲解有关python怎样使用装饰器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。使用装饰器def makebold(f): return&n...
      99+
      2024-04-02
    • Python装饰器函数怎么使用
      这篇文章主要介绍了Python装饰器函数怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python装饰器函数怎么使用文章都会有所收获,下面我们一起来看看吧。假如我写了一个函数 fdef f()...
      99+
      2023-07-02
    • python中@property装饰器怎么用
      这篇文章主要介绍python中@property装饰器怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、property的装饰器用法先简单上个小栗子说明:class property(fget=None,fse...
      99+
      2023-06-29
    • Python中的装饰器是什么及怎么使用
      使用环境为: Python 3.6.8什么是装饰器要理解装饰器之前,我们需要了解什么是闭包函数。闭包函数我们简单写个demo,再解释一下什么是闭包函数。def exterFunc(x): def innerFunc(y): re...
      99+
      2023-05-15
      Python
    • Python中如何使用装饰器?
      类方法和静态方法有点相似,他们都推荐使用类来调用(其实也可以使用对象来调用) 定义类方法 —使用@classmetho修饰(函数装饰器) —方法的第一个参数定义为cls(class的缩写),用类调用该方法时该参数会自动绑定 定义静...
      99+
      2023-01-31
      如何使用 Python
    • python装饰器property和setter怎么使用
      本篇内容介绍了“python装饰器property和setter怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.引子:函数也是对象...
      99+
      2023-07-02
    • vue指令中的修饰符怎么使用
      这篇文章主要介绍“vue指令中的修饰符怎么使用”,在日常操作中,相信很多人在vue指令中的修饰符怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue指令中的修饰符怎么使用”的疑惑有所帮助!接下来,请跟...
      99+
      2023-06-30
    • es6装饰器是什么及怎么使用
      本篇内容介绍了“es6装饰器是什么及怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在es6中,装饰者模式是一种在不改变原类和使用继承...
      99+
      2023-07-04
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作