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

默认文件1621850894404.png

1. 扩展eslintConfig配置

{
"eslintConfig": {
...
"parserOptions": {
...
"ecmaFeatures": {
"legacyDecorators": true
}
}
...
}
}

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

{
"vetur.validation.script": false,
}

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

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. 使用装饰器完成功能

<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>
posted @   前端小鑫同学  阅读(30)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示