vue+vuetify表格控件v-data-table使用自定义列渲染

    这里先说明一下vue项目中使用vuetify框架进行整合的办法:

    1、加入依赖  npm install vuetify --save

    2、加入开发依赖 npm install sass sass-loader deepmerge --save-dev

    3、在webpack.base.config.js中加入如下配置:

module.exports = {
	module:
		rules:[
			{
				test: /\.s(c|a)ss$/,
				use: [
				  'vue-style-loader',
				  'css-loader',
				  {
					loader: 'sass-loader',
					// Requires sass-loader@^7.0.0
					options: {
					  implementation: require('sass'),
					  indentedSyntax: true // optional
					},
					// Requires sass-loader@^8.0.0
					options: {
					  implementation: require('sass'),
					  sassOptions: {
						indentedSyntax: true // optional
					  },
					},
				  },
				],
			  }
		]
}

    4、自定义插件

    src/plugins/vuetify.js

import Vue from 'vue'
import Vuetify from 'vuetify'
import 'vuetify/dist/vuetify.min.css'
Vue.use(Vuetify)
const opts = {}

export default new Vuetify(opts)

    5、在代码中加入vuetify

    src/main.js

import Vue from 'vue'
import App from './App'
import router from './router'
import vuetify from '@/plugins/vuetify'
Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  vuetify,
  components: { App },
  template: '<App/>'
})

    /************************************************\

    以上只是介绍如何在vue项目中引入vuetify框架。

    下面我们看看如何使用vuetify的表格控件以及自定义渲染。

<template>
	<v-app>
		<v-main>
			<v-container>	
				<v-data-table
					disable-pagination
					hide-default-footer
					:headers="headers"
					:items="contents"
				>
				<template v-slot:item.operate="{ item }">
					{{item.id}} - 删除
				</template>
				</v-data-table>
			</v-container>
		</v-main>
	</v-app>
</template>

<script>
export default {
  name: 'HelloWorld',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App',
	  headers:[
		{
		  text:'id',
		  value:'id'
		},
		{
		  text:'name',
		  value:'name'
		},
		{
		  text:'age',
		  value:'age'
		},
		{
		  text:'operate',
		  value:'operate'
		}
	  ],
	  contents:[
		{
			id:'101',name:'xxx',age:18
		},
		{
			id:'102',name:'yyy',age:20
		}
	  ]
    }
  }
}
</script>

    以上代码中,我们在template模板中使用了v-app v-main v-container等vuetify组件,最后加入了v-data-table表格组件,表格组件使用必须的属性是需要定义表头和列表项。这里的属性就是headers和items属性。

    headers,items都在脚本部分通过data()来指定,这样页面就可以直接使用了,他们都是数组。

    headers:[{text:'',value:''}]中主要的两个属性分别是列显示名称和列对应真实数据的映射名。

    items中定义json数组对象,具体指定每一列数据项。

    这里简单的数据就可以这么来实现了。

    通常情况下,表格会有一些特殊情况,比如操作列,他需要自定义,还有一些状态显示也需要自定义,我们就不能在items数组中直接定义了,这时候在组件v-data-table内部嵌套一个<template></template>来实现,如下所示:

<v-data-table>
    <template v-slot:items.operate="{items}">
        {{item.id}} - 删除
    </template>
</v-data-table>

    通过v-slot:items.operate="{{ items }}"来指定对应的列。然后在<template></template>标签体内自定义渲染结果。

    这就好比react项目自定义渲染列表中的render函数一样了。我们可以看看效果:

    

 

 

 

<think>我们正在处理一个技术问题:在Vue3和TypeScript环境下,将vxe-table的表格编辑功能与antd-vue(Ant Design Vue)的表单验证功能集成。 目标:在表格中编辑数据时,使用antd-vue的Form组件进表单验证。 分析: 1. vxe-table是一个功能强大的表格组件,支持内编辑(包括单元格编辑、编辑等)。 2. antd-vue的Form组件提供了表单验证功能,我们可以通过Form.Item的rules属性定义验证规则。 思路: 我们需要在vxe-table的编辑模式下,使用antd-vue的Form和Form.Item包裹编辑组件(如Input、Select等),并应用验证规则。 步骤: 1. 在vxe-table配置中,定义可编辑的,并指定渲染函数(使用antd-vue的组件)。 2. 在编辑状态下,使用Form和Form.Item包裹编辑组件,并设置验证规则。 3. 处理验证逻辑,确保在保存时验证通过才提交数据。 注意:vxe-table的编辑模式有几种,这里我们可能使用插槽(slot)或者render函数来自定义编辑内容。 由于vxe-table支持通过插槽自定义编辑内容,我们可以利用这个特性嵌入antd-vue的Form和Form.Item。 但是,Form组件通常用于包裹整个表单,而表格中每一可以视为一个独立的表单。因此,我们可以为每一创建一个Form实例,或者使用一个大的Form来管理所有(但这样可能性能不好且复杂)。另一种做法是,使用antd-vue的Form.Item单独管理每个字段(antd-vue 4.x支持脱离Form的Form.Item,但需要提供form属性)。 在antd-vue 3.x(对应vue3)中,我们可以使用Form.useForm()创建表单实例,然后将这个实例传递给每一的编辑表单。 具体步骤: 1. 在表格的每一中,我们为可编辑的创建一个表单实例(使用Form.useForm()),并绑定到该的编辑表单上。 2. 在编辑模式下,使用Form和Form.Item包裹编辑组件,并设置rules。 3. 在保存时,调用表单实例的validate方法进验证。 但是,由于表格中可能同时编辑多,我们需要为每一维护一个表单实例。我们可以将表单实例存储在数据中,与数据关联。 然而,考虑到性能,我们可能只会在进入编辑状态时创建表单实例,并且只对当前编辑的验证。 下面是一个大致的实现步骤: 步骤1:安装必要的依赖 确保已经安装了ant-design-vue和vxe-table,并且版本支持vue3和typescript。 步骤2:在组件中引入所需的组件 ```typescript import { defineComponent, reactive, ref } from 'vue'; import { Form, Input, Button } from 'ant-design-vue'; import { VXETable, VxeTable, VxeColumn } from 'vxe-table'; import 'vxe-table/lib/style.css'; import 'ant-design-vue/dist/antd.css'; // 使用Form.useForm()创建表单实例 ``` 步骤3:定义表格和表单验证规则 ```typescript // 验证规则 const rules = { name: [{ required: true, message: '请输入姓名', trigger: 'blur' }], age: [{ required: true, message: '请输入年龄', trigger: 'blur' }] }; ``` 步骤4:定义表格数据,并为每一准备一个表单实例(或者动态创建) 我们可以在数据中为每一添加一个表单实例,或者使用一个Map来存储每的表单实例。这里为了简化,我们可以在进入编辑模式时动态创建。 但是,由于vxe-table的编辑模式通常是整编辑或单元格编辑,这里假设我们使用编辑模式(edit-config={mode: 'row'}')。 步骤5:使用vxe-table的插槽自定义编辑内容 在vxe-table中,我们可以通过插槽`edit`来自定义编辑内容。在插槽内,我们可以使用antd-vue的Form和Form.Item。 但是,注意:vxe-table的编辑插槽是在编辑模式下渲染的,我们可以在这里为当前编辑的创建一个表单。 步骤6:在保存时验证当前编辑的表单 具体代码结构: 由于代码较长,这里只给出关键部分。 注意:以下代码为示例代码,可能需要根据实际情况调整。 ```vue <template> <div> <vxe-table border :data="tableData" :edit-config="{ trigger: 'manual', mode: 'row', showStatus: true }" ref="tableRef" > <vxe-column type="index" width="60"></vxe-column> <vxe-column field="name" title="姓名" :edit-render="{}"> <template #edit="{ row }"> <!-- 为每一使用一个表单(注意:这里我们为每一单独使用一个Form) --> <a-form :model="row" layout="vertical" ref="formRefs"> <a-form-item name="name" :rules="rules.name"> <a-input v-model:value="row.name" /> </a-form-item> </a-form> </template> </vxe-column> <vxe-column field="age" title="年龄" :edit-render="{}"> <template #edit="{ row }"> <a-form :model="row" layout="vertical"> <a-form-item name="age" :rules="rules.age"> <a-input v-model:value="row.age" /> </a-form-item> </a-form> </template> </vxe-column> <vxe-column title="操作"> <template #default="{ row }"> <template v-if="$refs.tableRef.isEditByRow(row)"> <a-button @click="saveRow(row)">保存</a-button> <a-button @click="cancelRow(row)">取消</a-button> </template> <template v-else> <a-button @click="editRow(row)">编辑</a-button> </template> </template> </vxe-column> </vxe-table> </div> </template> <script lang="ts"> import { defineComponent, reactive, ref } from 'vue'; import { Form, Input, Button } from 'ant-design-vue'; import { VxeTableInstance } from 'vxe-table'; interface RowVO { id: number; name: string; age: number; } export default defineComponent({ components: { [Form.name]: Form, [Form.Item.name]: Form.Item, [Input.name]: Input, [Button.name]: Button, }, setup() { const tableRef = ref<VxeTableInstance>(); // 表格实例 const tableData = reactive<RowVO[]>([ { id: 1, name: '张三', age: 20 }, { id: 2, name: '李四', age: 22 }, ]); const rules = { name: [{ required: true, message: '请输入姓名', trigger: 'blur' }], age: [{ required: true, message: '请输入年龄', trigger: 'blur' }], }; // 编辑 const editRow = (row: RowVO) => { tableRef.value?.setEditRow(row); }; // 保存 const saveRow = (row: RowVO) => { // 这里需要验证当前的表单 // 但是注意:我们在模板中为每个字段都单独使用了Form.Item,并且每个字段都是独立的Form,这样验证可能比较麻烦。 // 另一种做法:我们使用一个Form包裹整,这样一次可以验证整。但是vxe-table的编辑插槽是每个字段独立的,所以我们需要调整。 // 调整思路:将整编辑的表单放在一个Form中,而不是每个字段一个Form。所以我们需要修改模板结构。 // 由于时间关系,我们调整模板:将整作为一个表单,这样在编辑时,整是一个Form,然后每个字段是Form.Item。 // 但是vxe-table的编辑插槽是每个字段分别调用的,所以我们需要将表单实例放在数据上,或者使用一个公共的表单实例(但这样会冲突)。 // 因此,我们可能需要改变设计:不使用vxe-table编辑插槽,而是使用编辑插槽(vxe-table支持编辑模式,并且可以自定义整个编辑)。 // 由于vxe-table编辑插槽是独立的,难以在整级别做验证,我们可以考虑使用编辑模式,并自定义整个编辑的内容。 // 所以,我们可能需要改变策略:使用编辑模式,并自定义整个编辑的模板(使用一个Form包裹整)。 // 由于代码复杂,这里先不展开,我们提供另一种思路:在保存时,手动对每个字段进验证(使用antd-vue的Form.Item的validate方法),但需要获取每个Form.Item的实例。 // 考虑到时间,这里我们暂时不深入,而是提供一种简单的验证方式:在保存时,我们检查每个必填字段是否为空,如果为空则提示。 // 但是这样就不能使用antd-vue的验证规则了。 // 因此,我们可能需要重新设计:使用一个Form包裹整,并且整编辑时,整个是一个表单。这需要自定义整个编辑,而不是每个。 // 由于问题复杂,我们暂时先给出一个不使用antd-vue表单验证的简单实现,或者使用vxe-table自带的验证(如果有)。 // 鉴于时间,我们决定采用另一种方式:使用vxe-table的校验规则(vxe-table自带校验功能),或者单独为每个字段使用antd-vue的Form.Item并手动触发验证。 // 这里我们尝试手动触发验证:在保存时,获取该编辑状态下每个Form.Item的引用,然后逐个验证。 // 但是我们在模板中为每个字段都创建了Form.Item,并且每个Form.Item都是独立的,没有使用同一个Form,所以我们可以给每个Form.Item设置ref,然后保存时调用它们的validate方法。 // 但是ref在循环中如何获取?我们可以使用动态ref,然后存储在一个对象中,以的id为键。 // 由于代码复杂度较高,且时间有限,这里我们提供一种简化方案:只验证必填字段,不使用antd-vue的验证提示,而是自己写提示。 // 或者,我们放弃在内编辑时使用antd-vue的Form.Item,而是使用vxe-table自带的校验配置(如果支持的话)。 // 由于vxe-table本身支持校验规则,我们可以使用vxe-table的校验功能。 // 因此,我们回到vxe-table的校验功能:vxe-table提供了校验规则配置,我们可以通过`edit-rules`属性设置校验规则。 // 例如: // <vxe-column field="name" title="姓名" :edit-render="{}" :edit-rules="[{ required: true, message: '请输入姓名' }]"> // ...编辑内容... // </vxe-column> // 这样,vxe-table在编辑时会自动校验。所以,我们可能不需要使用antd-vue的表单验证,而是直接使用vxe-table的校验。 // 所以,解决方案是:使用vxe-table自带的校验功能,因为它已经和编辑模式集成。 // 因此,我们修改代码如下: // 在上定义edit-rules // 然后保存时,使用vxe-table的validate方法校验当前。 // 所以,我们调整策略:使用vxe-table的校验规则。 // 但是用户要求使用antd-vue的form验证,所以我们需要满足这个要求。 // 如果必须使用antd-vue的form验证,那么我们需要在自定义编辑内容时,使用antd-vue的Form.Item,并且在保存时手动触发验证。 // 由于在编辑插槽中,每个字段是独立的,我们可以为每个字段的Form.Item设置ref,然后保存时触发验证。 // 我们为每个Form.Item设置ref,并存储起来。在保存时,遍历这些ref,执validate。 // 具体步骤: // 1. 在模板中,为每个Form.Item设置ref,使用一个函数,将ref存储到以id为键的对象中。 // 2. 在保存时,根据id获取该所有字段的Form.Item实例,然后逐个调用validate。 // 由于代码较为复杂,且时间关系,这里只给出部分代码示例: // 在setup中定义: // const formItemRefs = ref<Record<string, any>>({}); // const setFormItemRef = (el: any, rowId: number, field: string) => { // if (el) { // if (!formItemRefs.value[rowId]) { // formItemRefs.value[rowId] = {}; // } // formItemRefs.value[rowId][field] = el; // } // }; // 在模板中: // <a-form-item :ref="(el) => setFormItemRef(el, row.id, 'name')" ...> // 在saveRow中: // const saveRow = (row: RowVO) => { // const formItems = formItemRefs.value[row.id]; // if (formItems) { // const validatePromises = Object.values(formItems).map((formItem: any) => { // return formItem.validate(); // }); // Promise.all(validatePromises).then(() => { // // 验证通过,保存 // tableRef.value?.saveEdit(); // }).catch(() => { // // 验证失败 // }); // } // }; // 但是,这样实现起来较为复杂,而且antd-vue的Form.Item的validate方法返回的是Promise。 // 由于时间有限,我们不再深入,而是提供一种折中方案:使用vxe-table的校验规则,因为这样更简单,而且与表格编辑集成更好。 // 如果项目要求必须使用antd-vue的Form验证,那么可能需要考虑更复杂的集成方案,或者使用编辑模式并自定义整个编辑的内容(这样可以用一个Form包裹整)。 // 鉴于时间,我们给出使用vxe-table校验规则的实现,这样可以快速满足编辑校验的需求。 // 修改定义: // <vxe-column field="name" title="姓名" :edit-render="{}" :edit-rules="[{ required: true, message: '请输入姓名' }]"> // <template #edit="{ row }"> // <a-input v-model="row.name" /> // </template> // </vxe-column> // 保存时,调用vxe-table的校验: // const saveRow = (row: RowVO) => { // const $table = tableRef.value; // $table.validate(row).then(() => { // $table.saveEdit(); // }).catch(() => { // // 校验失败 // }); // }; // 因此,我们推荐使用vxe-table自带的校验规则,因为它与表格编辑功能集成得更好。 // 如果坚持要使用antd-vue的Form验证,那么请参考上面提到的复杂方案,并自实现。 // 由于时间,我们这里按照vxe-table的校验规则来实现。 // 代码将按照vxe-table的校验规则进。 }; // 取消编辑 const cancelRow = (row: RowVO) => { tableRef.value?.revertEdit(row); }; return { tableRef, tableData, rules, editRow, saveRow, cancelRow, }; }, }); </script> ``` 总结:由于在vxe-table编辑插槽中集成antd-vue的Form验证较为复杂,我们建议直接使用vxe-table提供的校验规则(edit-rules)来实现编辑时的验证。这样可以简化集成工作,并且vxe-table的校验功能已经足够强大。 如果必须使用antd-vue的Form验证,那么需要为每个字段的Form.Item设置ref,并在保存时手动触发验证,然后根据验证结果决定是否保存。但这种方式较为复杂,且需要处理多个Form.Item的验证结果。 因此,我们推荐使用vxe-table的校验规则。 如果用户坚持要使用antd-vue的Form验证,我们可以提供另一种思路:使用编辑模式,并且自定义整个编辑的内容(使用一个Form包裹整),这样可以使用antd-vue的Form实例进验证。但这种方式需要自定义整个编辑的模板,代码量较大。 由于时间关系,我们这里不展开。 最后,我们给出使用vxe-table校验规则的完整代码示例。 注意:以下代码使用vxe-table的校验规则,没有使用antd-vue的Form验证。 完整代码: ```vue <template> <div> <vxe-table border :data="tableData" :edit-config="{ trigger: 'manual', mode: 'row', showStatus: true }" ref="tableRef" > <vxe-column type="index" width="60"></vxe-column> <vxe-column field="name" title="姓名" :edit-render="{}" :edit-rules="[{ required: true, message: '请输入姓名' }]"> <template #edit="{ row }"> <a-input v-model="row.name" /> </template> <template #default="{ row }">{{ row.name }}</template> </vxe-column> <vxe-column field="age" title="年龄" :edit-render="{}" :edit-rules="[{ required: true, message: '请输入年龄' }]"> <template #edit="{ row }"> <a-input v-model="row.age" /> </template> <template #default="{ row }">{{ row.age }}</template> </vxe-column> <vxe-column title="操作"> <template #default="{ row }"> <template v-if="$refs.tableRef.isEditByRow(row)"> <a-button @click="saveRow(row)">保存</a-button> <a-button @click="cancelRow(row)">取消</a-button> </template> <template v-else> <a-button @click="editRow(row)">编辑</a-button> </template> </template> </vxe-column> </vxe-table> </div> </template> <script lang="ts"> import { defineComponent, reactive, ref } from 'vue'; import { Input, Button } from 'ant-design-vue'; import { VxeTableInstance } from 'vxe-table'; interface RowVO { id: number; name: string; age: number; } export default defineComponent({ components: { [Input.name]: Input, [Button.name]: Button, }, setup() { const tableRef = ref<VxeTableInstance>(); // 表格实例 const tableData = reactive<RowVO[]>([ { id: 1, name: '张三', age: 20 }, { id: 2, name: '李四', age: 22 }, ]); // 编辑 const editRow = (row: RowVO) => { tableRef.value?.setEditRow(row); }; // 保存 const saveRow = (row: RowVO) => { const $table = tableRef.value; if ($table) { $table.validate(row).then(() => { $table.saveEdit(); // 保存编辑 }).catch((e) => { console.error(e); }); } }; // 取消编辑 const cancelRow = (row: RowVO) => { tableRef.value?.revertEdit(row); }; return { tableRef, tableData, editRow, saveRow, cancelRow, }; }, }); </script> ``` 这样,我们就实现了在编辑时使用vxe-table的校验规则,并且编辑控件使用了antd-vue的Input组件。 虽然没有使用antd-vue的Form验证,但vxe-table的校验规则已经能够满足需求,并且与表格编辑功能无缝集成。 如果用户有更复杂的验证需求,可以参考vxe-table的校验规则配置:https://vxetable.cn/#/table/start/validate 希望这个回答对你有帮助。 相关问题: 1. 在vxe-table中,如何实现单元格编辑时的实时验证? 2. 如何使用antd-vue的Form表单与vxe-table的编辑功能深度集成? 3. vxe-table的校验规则支持哪些验证方式? 4. 在vxe-table中,如何自定义校验规则的提示信息样式(比如使用antd-vue的提示样式)?</think>在 Vue3 和 TypeScript 环境下,将 vxe-table 的表格编辑功能与 antd-vue 的表单验证功能集成,可以通过以下步骤实现: ### 实现步骤 #### 1. 安装依赖 ```bash pnpm install vxe-table@4.x ant-design-vue@3.x ``` #### 2. 配置表格与表单验证 ```vue <template> <a-form :model="formState" ref="formRef"> <vxe-table border :data="tableData" :edit-config="{ trigger: 'manual', mode: 'row', showStatus: true }" > <!-- 可编辑 --> <vxe-column field="name" title="姓名" :edit-render="{}"> <template #edit="{ row }"> <a-form-item :name="`name_${row.id}`" :rules="[{ required: true, message: '姓名不能为空' }]" > <a-input v-model:value="row.name" @blur="validateField(`name_${row.id}`)" /> </a-form-item> </template> </vxe-column> <!-- 操作 --> <vxe-column title="操作"> <template #default="{ row }"> <a-space> <a-button @click="saveRow(row)" v-if="isEditing(row)">保存</a-button> <a-button @click="editRow(row)" v-else>编辑</a-button> </a-space> </template> </vxe-column> </vxe-table> </a-form> </template> <script lang="ts"> import { defineComponent, reactive, ref } from 'vue'; import { Form, Input } from 'ant-design-vue'; import type { FormInstance } from 'ant-design-vue'; import { VxeTableInstance } from 'vxe-table'; interface TableItem { id: number; name: string; age: number; } export default defineComponent({ components: { AForm: Form, AFormItem: Form.Item, AInput: Input }, setup() { const formRef = ref<FormInstance>(); const tableData = reactive<TableItem[]>([ { id: 1, name: '张三', age: 25 }, { id: 2, name: '李四', age: 30 } ]); // 当前编辑的ID const editingKey = ref<number | null>(null); // 验证单个字段 const validateField = (field: string) => { formRef.value?.validateFields([field]); }; // 开始编辑 const editRow = (row: TableItem) => { editingKey.value = row.id; }; // 保存数据 const saveRow = async (row: TableItem) => { try { // 验证整 await formRef.value?.validateFields( [`name_${row.id}`, `age_${row.id}`], { recursive: true } ); // 验证通过后提交数据 console.log('保存数据:', row); editingKey.value = null; } catch (error) { console.error('验证失败:', error); } }; // 检查是否在编辑状态 const isEditing = (row: TableItem) => { return editingKey.value === row.id; }; return { formRef, tableData, editRow, saveRow, isEditing, validateField }; } }); </script> ``` ### 关键实现说明 1. **表单验证集成**: - 使用 `<a-form>` 包裹整个表格,建立表单上下文 - 在可编辑单元格内使用 `<a-form-item>` 并设置验证规则 - 动态生成字段名:`:name="'name_' + row.id"` 确保每字段唯一 2. **编辑状态管理**: - 使用 `editingKey` 跟踪当前编辑 - `isEditing()` 方法判断是否处于编辑状态 - 通过 `vxe-table` 的 `edit-config` 配置手动触发编辑模式 3. **验证触发方式**: - 字段级验证:`@blur` 事件触发单个字段验证 - 级验证:保存时使用 `validateFields()` 验证整 - 支持递归验证嵌套字段(`recursive: true`) 4. **TypeScript 类型**: - 明确定义表格数据类型 `TableItem` - 使用 `FormInstance` 类型声明表单引用 - 使用 `VxeTableInstance` 类型声明表格实例 ### 优化建议 1. **复杂验证场景**: ```typescript // 在setup中添加自定义验证规则 const customRules = { age: [ { validator: (_: any, value: number) => value > 18 ? Promise.resolve() : Promise.reject('年龄必须大于18岁') } ] }; // 在模板中使用 <a-form-item :rules="customRules.age"> <a-input v-model:value="row.age"/> </a-form-item> ``` 2. **批量保存**: ```typescript const saveAll = async () => { try { await formRef.value?.validateFields(); // 提交整个表格数据 console.log('全部数据:', tableData); } catch (e) { message.error('存在验证错误的字段'); } }; ``` 3. **性能优化**: ```vue <!-- 按需渲染编辑组件 --> <template v-if="isEditing(row)"> <a-form-item>...</a-form-item> </template> <template v-else> {{ row.name }} </template> ``` ### 相关问题 1. 如何在 vxe-table 中实现单元格级别的实时验证? 2. 当表格数据量较大时,如何优化表单验证性能? 3. 如何将 vxe-table 的编辑状态与 Vuex/Pinia 状态管理集成? 4. 在 antd-vue 表单中如何处理动态生成的嵌套字段验证? 5. 如何实现 vxe-table 和 antd-vue 的联合分页与数据加载?
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值