前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让 Vueer 融入切面编程的队伍

让 Vueer 融入切面编程的队伍

作者头像
前端小鑫同学
发布2023-04-22 20:11:02
5370
发布2023-04-22 20:11:02
举报

🎄Hi~ 大家好,我是小鑫同学,资深 IT 从业者,InfoQ 的签约作者,擅长前端开发并在这一领域有多年的经验,致力于分享我在技术方面的见解和心得

进入正题

切面编程是一种编程范式,它允许你在程序执行的不同阶段注入代码,以实现各种功能,例如日志记录、性能监控、安全性检查等。Typescript 提供的实验性功能 Decorator 就是切面编程的实践,在 Vuejs 开发时可以同时搭配 Typescript 来实现。这里使用 Vuejs 官方推荐的社区项目 vue-facing-decorator 开箱体验。

基础项目准备

依旧推荐你来1024Code Fork 我的《【项目模板】Vue3+Vite3+Ts4》 开始这次学习,如果你不习惯使用在线的IDE,那么可以将项目导出到本地运行~

安装 vue-facing-decorator:

代码语言:javascript
复制
npm install --save vue-facing-decorator

启用 decorator:

代码语言:javascript
复制
{
  "compilerOptions": {
     "experimentalDecorators": true
  }
}

改造 HelloWorld 组件

类组件即一个继承自 Vue 父类并且使用 @Component 装饰器来标记一个类。组件因有的 name、emits、components 等选项需配置到 @Component({ /* options */ }) 中。

首先来尝试将项目内置的 HelloWorld 组件改造成 AOP 形式,主要包括了一个响应式的 count 的和一个组件属性 msg,在 template 中对于这两个属性的调用不需要任何的改动。

特别说明:禁止使用<script setup>,所以第一步就是去掉script中的setup

定义一个空组件:

代码语言:javascript
复制
import { Component, Vue } from "vue-facing-decorator";
@Component
export default class HelloWorld extends Vue {}

定义响应式的数据count

代码语言:javascript
复制
const count = ref(0)

     ↓↓↓↓↓↓

import { Component, Vue } from "vue-facing-decorator";
@Component
export default class HelloWorld extends Vue {
  count = 0;
}

定义组件的属性msg

代码语言:javascript
复制
defineProps<{ msg: string }>()

     ↓↓↓↓↓↓

import { Component, Vue, Prop } from "vue-facing-decorator";
@Component
export default class HelloWorld extends Vue {
  @Prop({
    default: ''
  })
  msg!: string
}

至此 HelloWorld 组件由可以正常的使用的,在 class 中定义的属性将是一个响应式的数据,定义一个 Prop 则需要用到 @Prop 装饰器来实现。

APO + 命令式 Dialog 组件

命令式的 Dialog 组件指的是组件的状态由组件本身提供,父组件通过 Dialog 组件的实例来操作 Dialog 组件对外提供的函数的方式。

需要安装ant-design-vue组件库并做如下配置:

代码语言:javascript
复制
import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/antd.css';

createApp(App).use(Antd).mount('#app');

1. 定义一个 BusinessDialog 类组件:

代码语言:javascript
复制
import { Vue, Component } from 'vue-facing-decorator';

@Component
export default class BusinessDialog extends Vue{}

2. 定义一个 visible 和 开启、关闭的函数:

代码语言:javascript
复制
import { Vue, Component } from 'vue-facing-decorator';

@Component
export default class BusinessDialog extends Vue{
  visible = false;

  open() {
    this.visible = true
  }
  
  close() {
   this.visible = false 
  }
}

3. 配置组件支持将open暴露给父组件:

代码语言:javascript
复制
import { Vue, Component } from 'vue-facing-decorator';

@Component({
  expose: ['open']
})
export default class BusinessDialog extends Vue{
  visible = false;

  open() {
    this.visible = true
  }
  
  close() {
   this.visible = false 
  }
}

4. 定义一个 emit,在关闭 Dialog 后通知到父组件:

代码语言:javascript
复制
import { Vue, Component, Emit } from 'vue-facing-decorator';

@Component({
  expose: ['open']
})
export default class BusinessDialog extends Vue{
  visible = false;

  open() {
    this.visible = true
  }
  
  close() {
   this.visible = false 
  }

  @Emit("complete")
  handleOk() {
    this.close();
    return 200;
  };
}

PS:在 App 组件中你依然可以使用非类组件,在 App 组件中提供了使用 Dialog 组件的示例。

总结

一个融入切面编程的 Vuejs 项目就完成了上手操作,更多的装饰器的使用可以通过vue-facing-decorator文档详细了解,接下来会通过自定义装饰器来在这个项目中实现一些常用的功能。


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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 进入正题
  • 基础项目准备
  • 改造 HelloWorld 组件
  • APO + 命令式 Dialog 组件
    • 1. 定义一个 BusinessDialog 类组件:
      • 2. 定义一个 visible 和 开启、关闭的函数:
        • 3. 配置组件支持将open暴露给父组件:
          • 4. 定义一个 emit,在关闭 Dialog 后通知到父组件:
          • 总结
          相关产品与服务
          应用性能监控
          应用性能监控(Application Performance Management,APM)是一款应用性能管理平台,基于实时多语言应用探针全量采集技术,为您提供分布式性能分析和故障自检能力。APM 协助您在复杂的业务系统里快速定位性能问题,降低 MTTR(平均故障恢复时间),实时了解并追踪应用性能,提升用户体验。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档