87 lines
1.9 KiB
Markdown
87 lines
1.9 KiB
Markdown
|
|
---
|
|||
|
|
name: arco-vue-architecture
|
|||
|
|
description: "Arco Design Vue 架构和编码约定。用于 Vue 3 SFC 结构、Composition API、全局/局部注册、导入、属性、事件、插槽和 v-model。"
|
|||
|
|
user-invocable: false
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 架构约定
|
|||
|
|
|
|||
|
|
把需求转换为使用 Arco Design Vue 的 Vue 3 代码时使用本参考。
|
|||
|
|
|
|||
|
|
## 推荐 SFC 结构
|
|||
|
|
|
|||
|
|
```vue
|
|||
|
|
<script setup lang="ts">
|
|||
|
|
import { reactive } from 'vue';
|
|||
|
|
import { Message } from '@arco-design/web-vue';
|
|||
|
|
|
|||
|
|
const form = reactive({
|
|||
|
|
name: '',
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
const handleSubmit = () => {
|
|||
|
|
Message.success(`提交:${form.name}`);
|
|||
|
|
};
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<template>
|
|||
|
|
<a-form :model="form" layout="vertical" @submit-success="handleSubmit">
|
|||
|
|
<a-form-item field="name" label="名称" required>
|
|||
|
|
<a-input v-model="form.name" placeholder="请输入名称" />
|
|||
|
|
</a-form-item>
|
|||
|
|
<a-button type="primary" html-type="submit">提交</a-button>
|
|||
|
|
</a-form>
|
|||
|
|
</template>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 组件注册
|
|||
|
|
|
|||
|
|
完整注册:
|
|||
|
|
|
|||
|
|
```ts
|
|||
|
|
app.use(ArcoVue);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
局部导入:
|
|||
|
|
|
|||
|
|
```ts
|
|||
|
|
import { Button, Space } from '@arco-design/web-vue';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
示例和小型应用可以使用完整注册。生产项目应跟随仓库已有的导入策略。
|
|||
|
|
|
|||
|
|
## 属性、事件、插槽
|
|||
|
|
|
|||
|
|
- 模板属性使用 kebab-case:`show-jumper`、`row-selection`、`popup-container`。
|
|||
|
|
- 动态属性使用 `:`:`:columns="columns"`、`:data="rows"`。
|
|||
|
|
- 事件使用 `@`:`@change`、`@page-change`、`@ok`、`@cancel`。
|
|||
|
|
- 插槽使用 `#`:`#title`、`#extra`、`#cell="{ record, column }"`。
|
|||
|
|
|
|||
|
|
## v-model
|
|||
|
|
|
|||
|
|
组件主值使用普通 `v-model`。
|
|||
|
|
|
|||
|
|
```vue
|
|||
|
|
<a-input v-model="keyword" />
|
|||
|
|
<a-select v-model="status" :options="options" />
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
组件文档声明命名绑定时,使用命名 `v-model`。
|
|||
|
|
|
|||
|
|
```vue
|
|||
|
|
<a-modal v-model:visible="visible" title="编辑">
|
|||
|
|
...
|
|||
|
|
</a-modal>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 避免 React 模式
|
|||
|
|
|
|||
|
|
不要使用:
|
|||
|
|
|
|||
|
|
- `Form.useForm()`
|
|||
|
|
- JSX 子节点访问方式
|
|||
|
|
- `Component.Sub` 子组件语法
|
|||
|
|
- 直接复制 React 的 `value` / `onChange` 示例
|
|||
|
|
|
|||
|
|
应使用本 skill 中的 Vue 参考。
|