前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TypeScript方法装饰器应用

TypeScript方法装饰器应用

作者头像
前端小鑫同学
发布2022-12-26 08:45:59
2960
发布2022-12-26 08:45:59
举报
文章被收录于专栏:小鑫同学编程历险记

背景

在初入安卓开发的阶段要为一个按钮绑定点击事件需要经过

  1. 通过ID查找视图
  2. 为视图添加监听方法
  3. 完成点击事件具体内容

后来引入了一些IOC的库使得第1步和第2步可以通过配置自动完成,我们只关心点击事件的具体逻辑处理即可。 在前端MVVM框架盛行的现在,我们的事件绑定已经相当的简单了,但还是会有时候用到传统的写法,我们通过改造传统的前端事件绑定的写法了了解一下TypeScript中方法装饰器的使用。

HTML中只有视图的声明
代码语言:javascript
复制
<button id="query">查询</button>
<button id="cancel">取消</button>
代码语言:javascript
复制
const queryNode = document.querySelector("#query");
queryNode?.addEventListener("click", function () {
  console.log("发起请求,查询数据~");
});

从上面的代码看的出前端的事件绑定和安卓中事件绑定的流程一致,都需要查找视图,添加监听方法,编写事件具体内容,重复的事情我们交给程序自动完成,专心写好查询函数。

引入接口来规范传入的参数

参数1:绑定视图的ID

参数2:绑定事件的名称

代码语言:javascript
复制
interface EventOptions {
id: string;
event: string;
}
创建方法装饰器

方法装饰器在运行时会当做函数传入以下三个参数来供我们使用

  • 参数1:原型对象
  • 参数2:成员名
  • 参数3:属性描述符

说明:

装饰器函数中使用到了闭包

通过参数1和2可以灵活定位函数

代码语言:javascript
复制
function bindEvent(options: EventOptions) {
const { id, event } = options;
return function (
 target: any, // ①原型对象
 propertyKey: string, // ②成员的名字
 descriptor: PropertyDescriptor // ③成员的属性描述符
) {
 const node = document.querySelector(`#${id}`);
 node?.addEventListener(event, function () {
 ④ 执行函数
 target[propertyKey]();
 });
};
}
模拟类组件进行装饰
代码语言:javascript
复制
export class Component {
  @bindEvent({ id: "query", event: "click" })
  query() {
    console.log("发起请求,查询数据~");
  }

  @bindEvent({ id: "cancel", event: "click" })
  cancel() {
    console.log("接口取消~");
  }
}

现在就可以将视图的ID和待绑定的事件类型传入装饰器进行配置,我们就专心完成点击事件的具体功能吧。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
    • 引入接口来规范传入的参数
      • 创建方法装饰器
        • 模拟类组件进行装饰
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档