前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Vue中初次使用装饰器(Decorator)

在Vue中初次使用装饰器(Decorator)

作者头像
前端小鑫同学
发布2022-12-25 11:01:29
发布2022-12-25 11:01:29
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

1. 扩展eslintConfig配置

代码语言:javascript
代码运行次数:0
运行
复制
{
    "eslintConfig": {
    ...
    "parserOptions": {
      ...
      "ecmaFeatures": {
        "legacyDecorators": true
      }
    }
    ...
  }
}

2. 关闭Vetur提示(项目级别)

代码语言:javascript
代码运行次数:0
运行
复制
{
    "vetur.validation.script": false,
}

3. 新建装饰器函数: src\decorators\index.js

代码语言:javascript
代码运行次数:0
运行
复制
export function confirm(message, title, cancel) {
    return (target, name, descriptor) => {
        console.log('name ', name);
        console.log('target ', target);
        console.log('descriptor ', descriptor);
        // 保存被装饰的函数
        const fn = descriptor.value
        // 重写函数扩展功能
        descriptor.value = function (...reset) {
            const result = window.confirm(`${title}\n\n${message}`)
            if (result) {
                // 执行原函数
                fn.apply(this, reset)
            } else {
                // 执行取消函数并绑定this便于后续使用
                cancel && cancel.apply(this, [])
            }
        }
    }
}

4. 使用装饰器完成功能

代码语言:javascript
代码运行次数:0
运行
复制
<script>
import { confirm } from "./decorators";
export default {
  name: "App",
  methods: {
    @confirm("确定要删除吗?", "提示", function() {
        // 通过在装饰器函数中使用apply改变this,使得此处可以使用定义的cancel函数    
        this.cancel();
    })
    // 简化在删除功能中的二次确认部分
    deleteItem(id) {
      console.log("删除成功", id);
    },
    cancel() {
      console.log("取消了");
    },
  },
};
</script>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 扩展eslintConfig配置
  • 2. 关闭Vetur提示(项目级别)
  • 3. 新建装饰器函数: src\decorators\index.js
  • 4. 使用装饰器完成功能
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档