Vue3 Class 组件脚手架

SKILL开发
开发 未标注权限 许可证不明确
安装这个技能

Vue3 Class 组件脚手架 — 用面向对象的方式写 Vue3 组件。如果你厌倦了 Composition API 的 setup 里堆满 ref、reactive、watch、computed、emit 的混乱写法,或者从 Vue2 转过来怀念 class 组件的清爽,这个脚手架就是为你准备的。 基于 vue-facing-decorator,完全兼容 Vue3 响应式系统,支持 @Component 定义组件、@Prop 接收参数、@Watch 监听数据变化、@Emit 触发事件,全部一行注解搞定。类的继承让你天然复用公共逻辑,接口实现让代码结构更清晰,再也不用担心 setup 里的代码越写越乱。 内置 Vite 5 + TypeScript 模板,开箱即用。执行后自动创建可运行项目,包含计数器示例组件,展示 @Prop 传参、计算属性、生命周期、@Watch 监听、@Emit 事件派发等常见用法,三分钟上手。 适合习惯面向对象开发、追求代码整洁、希望组件逻辑更清晰分层的 Vue 开发者。无论是重写老项目,还是新开项目,都能让你写 Vue3 像写 Java 一样舒服。

一句话选型结论

按资料字段整理

Vue3 Class 组件脚手架是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install xinrui/vue3-class-syntax
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方xinrui仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 enterprise
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791623270
正文体量6.6 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
Vue3 Class 组件脚手架当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

6.6 KB
模型实际读到的说明书原文,来自技能仓库

Vue3 Class 组件开发语法

基于 vue-facing-decorator 库,在 Vue3 中使用 class 语法和装饰器开发组件,支持面向对象特性(继承、接口)。

执行步骤

当调用此 Skill 时,按以下步骤创建项目并初始化:

步骤 1:创建 Vite + Vue3 + TypeScript 项目

# 创建项目,使用 Vue + TypeScript 模板
npm create vite@latest . -- --template vue-ts

# 安装核心依赖
npm install vue-facing-decorator

步骤 2:配置 tsconfig.app.json

在 tsconfig.app.json 的 compilerOptions 中添加两项配置:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "useDefineForClassFields": true
  }
}

步骤 3:配置 vite.config.ts

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import { resolve } from "path";

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      "@": resolve(__dirname, "src"),
      "@com": resolve(__dirname, "src/com"),
    },
  },
});

步骤 4:创建目录结构

mkdir -p src/components

步骤 5:创建入口 HTML

创建 src/index.html:

<!doctype html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vue3 Class 示例</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" lang="ts">
      import { createApp } from "vue";
      import App from "./index.vue";
      createApp(App).mount("#app");
    </script>
  </body>
</html>

步骤 6:创建基础类

创建 src/index.ts:

import { Vue } from "vue-facing-decorator";

export default class Index extends Vue {
  public title: string = "Vue3 Class 组件示例";

  log(msg: string) {
    console.log(msg);
  }
}

步骤 7:创建根组件

创建 src/index.vue:

<template>
  <div>
    <h1>{{ title }}</h1>
    <Counter :start-value="10" @reset="handleReset" />
  </div>
</template>

<script lang="ts">
import { Component, toNative } from 'vue-facing-decorator';
import Index from './index';
import Counter from './components/Counter.vue';

@Component({
  components: {
    Counter
  }
})
class App extends Index {
  handleReset(val: number) {
    this.log('已重置为:' + val);
  }
}
export default toNative(App);
</script>

步骤 8:创建示例组件

创建 src/components/Counter.vue:

<template>
  <div>
    <p>计数: {{ count }}</p>
    <p>加倍: {{ doubleCount }}</p>
    <button @click="increment">+1</button>
    <button @click="decrement">-1</button>
    <button @click="reset">重置</button>
  </div>
</template>

<script lang="ts">
import { Component, Prop, Watch, Emit, Vue, toNative } from 'vue-facing-decorator';

@Component
class Counter extends Vue {
  @Prop({ default: 0 }) startValue: number;

  count: number = 0;

  get doubleCount() {
    return this.count * 2;
  }

  mounted() {
    this.count = this.startValue;
  }

  @Watch("count")
  onCountChange(newVal: number, oldVal: number) {
    console.log(`count 从 ${oldVal} 变为 ${newVal}`);
  }

  increment() {
    this.count++;
  }

  decrement() {
    this.count--;
  }

  reset() {
    this.count = 0;
    this.onReset();
  }

  @Emit("reset")
  onReset() {
    return this.count;
  }
}
export default toNative(Counter);
</script>

步骤 9:验证项目

npm run dev

访问终端输出的地址,页面应显示一个计数器和操作按钮,说明 Vue3 class 组件已成功运行。

最终项目结构

项目根目录/
├── vite.config.ts
├── tsconfig.json
├── tsconfig.app.json
├── tsconfig.node.json
├── package.json
├── src/
│   ├── index.html          # 入口 HTML
│   ├── index.ts            # 基础类
│   ├── index.vue           # 根组件(class 写法)
│   └── components/
│       └── Counter.vue     # 示例组件(class 写法)

语法参考

1. 组件定义

import { Component, Vue, toNative } from 'vue-facing-decorator';

@Component({
  components: {}
})
class MyComponent extends Vue {
  // 组件逻辑
}
export default toNative(MyComponent);

2. 属性传参 (@Prop)

import { Component, Prop, Vue, toNative } from 'vue-facing-decorator';

@Component
class MyComponent extends Vue {
  @Prop title: string;
  @Prop({ default: false }) visible: boolean;
}

3. 监听数据变化 (@Watch)

import { Component, Watch, Vue, toNative } from 'vue-facing-decorator';

@Component
class MyComponent extends Vue {
  @Watch("someProperty", { deep: true })
  onSomePropertyChange(newVal: any, oldVal: any) {
    // 处理变化
  }
}

4. 触发事件 (@Emit)

import { Component, Emit, Vue, toNative } from 'vue-facing-decorator';

@Component
class MyComponent extends Vue {
  @Emit("close")
  handleClose() {
    return false;
  }
}

5. 计算属性 (getter)

@Component
class MyComponent extends Vue {
  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }
}

6. 生命周期方法

@Component
class MyComponent extends Vue {
  async mounted() {
    this.initData();
  }
  beforeUnmount() {
    // 清理
  }
}

面向对象特性

继承

组件类可以继承其他类,实现代码复用:

// 父类
@Component
class BaseComponent extends Vue {
  public title: string = "";

  log(msg: string) {
    console.log(msg);
  }
}

// 子类继承父类
@Component
class ChildComponent extends BaseComponent {
  async mounted() {
    this.log(this.title); // 调用父类方法
  }
}
export default toNative(ChildComponent);

接口实现

export interface IControl {
  init(): void;
}

@Component
class MyComponent extends Vue implements IControl {
  init() {
    // 实现接口方法
  }
}
export default toNative(MyComponent);

注意事项

  1. 组件文件必须添加 export default toNative(ComponentClass) 导出
  2. @Component 装饰器必须放在类声明之前
  3. 使用 @Prop 定义传入参数,@Watch 监听数据变化,@Emit 触发事件
  4. 组件类需要继承 Vue(从 vue-facing-decorator 导入)
  5. 在 tsconfig.app.json 中必须开启 experimentalDecorators 和 useDefineForClassFields

常见问题

5 问
答案由本站依据条目字段整理
Vue3 Class 组件脚手架怎么安装?

在支持 Skills 的客户端里执行:skillhub install xinrui/vue3-class-syntax。安装方式为未标注。装完刷新技能列表或重开客户端。

Vue3 Class 组件脚手架支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

Vue3 Class 组件脚手架权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

Vue3 Class 组件脚手架收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

Vue3 Class 组件脚手架用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。