hooks.md
September 19, 2025 · View on GitHub
内置Hook
AirPower-Web 提供了一系列内置 Hook,用于简化常见的业务逻辑处理。
表格相关 Hook
useTable
基础表格 Hook,提供表格数据加载、分页、排序等基本功能。
import {useTable} from '@airpower/web'
const {
tableData, // 表格数据
loading, // 加载状态
pagination, // 分页信息
fetchTableData // 获取表格数据方法
} = useTable(UserService)
useTableList
列表表格 Hook,在 useTable 基础上增加了搜索功能。
import {useTableList} from '@airpower/web'
const {
tableData,
loading,
pagination,
searchForm, // 搜索表单数据
handleSearch, // 处理搜索
resetSearch // 重置搜索
} = useTableList(UserService)
useTableTree
树形表格 Hook,用于展示具有层级关系的数据。
import {useTableTree} from '@airpower/web'
const {
tableData,
loading,
loadTreeData // 加载树形数据方法
} = useTableTree(DepartmentService)
表单相关 Hook
useDetail
详情页面 Hook,用于获取和展示数据详情。
import {useDetail} from '@airpower/web'
const {
detailData, // 详情数据
loading, // 加载状态
fetchDetail // 获取详情方法
} = useDetail(UserService, route.params.id)
useEditor
编辑页面 Hook,用于处理新增和编辑表单。
import {useEditor} from '@airpower/web'
const {
formData, // 表单数据
loading, // 加载状态
fetchDetail, // 获取详情(编辑时)
submitForm // 提交表单
} = useEditor(UserService, route.params.id)
Hook 使用示例
表格页面使用 useTableList
<template>
<APage title="用户管理">
<!-- 搜索表单 -->
<AForm :model="searchForm" :service="UserService" type="search"/>
<!-- 操作按钮 -->
<AButton primary icon="ADD" @click="handleAdd">新增用户</AButton>
<!-- 数据表格 -->
<ATable
:data="tableData"
:loading="loading"
:pagination="pagination"
@refresh="fetchTableData"
/>
</APage>
</template>
<script setup>
import {useTableList} from '@airpower/web'
import {UserService} from '@/service/UserService'
const {
tableData,
loading,
pagination,
searchForm,
fetchTableData
} = useTableList(UserService)
const handleAdd = () => {
// 跳转到新增页面
}
</script>
编辑页面使用 useEditor
<template>
<APage title="编辑用户">
<AForm
:model="formData"
:service="UserService"
:loading="loading"
type="edit"
/>
<div class="form-actions">
<AButton @click="router.back">取消</AButton>
<AButton primary @click="submitForm">保存</AButton>
</div>
</APage>
</template>
<script setup>
import {useEditor} from '@airpower/web'
import {UserService} from '@/service/UserService'
const route = useRoute()
const router = useRouter()
const {
formData,
loading,
submitForm
} = useEditor(UserService, route.params.id)
</script>