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>