VUE3和antd组件库实现动态展示tab页,并且每个tab页签下动态生成form表单。_vue3 a-tabs(3)

HTTP

  • HTTP 报文结构是怎样的?

  • HTTP有哪些请求方法?

  • GET 和 POST 有什么区别?

  • 如何理解 URI?

  • 如何理解 HTTP 状态码?

  • 简要概括一下 HTTP 的特点?HTTP 有哪些缺点?

  • 对 Accept 系列字段了解多少?

  • 对于定长和不定长的数据,HTTP 是怎么传输的?

  • HTTP 如何处理大文件的传输?

  • HTTP 中如何处理表单数据的提交?

  • HTTP1.1 如何解决 HTTP 的队头阻塞问题?

  • 对 Cookie 了解多少?

  • 如何理解 HTTP 代理?

  • 如何理解 HTTP 缓存及缓存代理?

  • 为什么产生代理缓存?

  • 源服务器的缓存控制

  • 客户端的缓存控制

  • 什么是跨域?浏览器如何拦截响应?如何解决?

    开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

需求:
根据后端返回数据使用标签页组件动态生成标签,每个标签展示对应标签的form表单。提交时需要动态校验表单。

  <a-tabs v-model:activeKey="stateK.activeTab">
                    <a-tab-pane v-for="(tab, index) in stateK.editNameModel" :key="tab.id" :tab="tab.name">
                        <div class="edit-form">
                            <a-form :model="tab.data" :ref="getFormRef(index)">
                                <a-row v-for="(item, index) in tab.data" :key="index" :gutter="24">
                                    <a-col :span="10">
                                        <a-form-item
                                            label="项目全称"
                                            :rules="[{ required: true, message: '请输入项目全称!', trigger: 'blur' }]"
                                            :name="[index, 'projectName']"
                                        >
                                            <a-input v-model:value="item.projectName" disabled />
                                        </a-form-item>
                                    </a-col>
                                    <a-col :span="6">
                                        <a-form-item
                                            label="项目序号"
                                            :rules="[{ required: true, message: '请输入项目序号!', trigger: 'blur' }]"
                                            :name="[index, 'projectSeqNo']"
                                        >
                                            <a-input-number
                                                style="width: 100%"
                                                :maxlength="7"
                                                show-count
                                                v-model:value="item.projectSeqNo"
                                            />
                                        </a-form-item>
                                    </a-col>
                                    <a-col :span="8">
                                        <a-form-item
                                            label="项目简称"
                                            :rules="{ required: true, validator: validateShortName, trigger: 'blur' }"
                                            :name="[index, 'projectShortName']"
                                        >
                                            <a-input v-model:value="item.projectShortName" :maxlength="7" show-count />
                                        </a-form-item>
                                    </a-col>
                                </a-row>
                            </a-form>
                        </div>
                    </a-tab-pane>
                </a-tabs>

const stateK = reactive({
 editNameModel: []
})
//声明表单ref动态生成具体数量不知道,所以是数组
 const editNameRef = ref([])
 //getFormRef 在 Vue 中,使用 ref 创建的引用变量是响应式的。在组件渲染期间,如果你修改了 editNameRef,那么 Vue 会在下一个渲染周期中重新渲染组件并更新相关的 DOM。
 //但是,editNameRef 在模板中使用的时候,可能是在组件渲染之前被访问到,导致它是空的。这是因为在模板中的代码(如 @click="submitForm")可能在组件初始化之前就被解析。
 //为了解决这个问题,你可以使用 ref 创建一个响应式的数组,然后在 setup 钩子中根据表单的数量动态地填充这个数组。
 //这里困扰我一下午!!!!!
  const getFormRef = index => {
        editNameRef.value[index] = editNameRef.value[index] || ref(null)
        return editNameRef.value[index]
    }
//获取动态数据
  function handleGetName() {
        post('xxx').then(data => {
            if (data.code === 200) {
                stateK.editNameVisible = true
                stateK.editNameModel = data.data
                stateK.activeTab = stateK.editNameModel[0].id
            } else {
                message.error(data.message || '获取项目简称失败')
            }
        })
    }
    //保存校验
       function handleChangeName() {
        let formData = []
        Promise.all(editNameRef.value.map(formRef => formRef.value[0].validate()))
            .then(() => {


### 基础学习:

前端最基础的就是 HTML , CSS 和 JavaScript 。

##### 网页设计:HTML和CSS基础知识的学习

HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

![](https://img-blog.csdnimg.cn/img_convert/5128cdf3751b22309f080f02e731d577.webp?x-oss-process=image/format,png)


CSS样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。所有这些用来改变内容外观的东西称之为表现。

![](https://img-blog.csdnimg.cn/img_convert/db63065518b7a44aa22068893242bd19.webp?x-oss-process=image/format,png)


##### 动态交互:JavaScript基础的学习

JavaScript是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。

![](https://img-blog.csdnimg.cn/img_convert/357c8487a8d2ac58a59e86f64075aa47.webp?x-oss-process=image/format,png)

t基础的学习

JavaScript是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。

[外链图片转存中...(img-sn1BM0qo-1715832225070)]

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用Ant Design Vue的a-tabs组件时,如果想在tab添加一个开关,可以通过在a-tab-pane组件添加一个v-if的判断来实现。具体做法是,在a-tab-pane组件添加一个v-if="activeKey === pane.key"的判断条件,只有当当前tab的key与activeKey相等时才渲染内容。这样就可以根据需要来控制tab的开关状态。示例代码如下: ```html <a-tabs v-model="activeKey" type="editable-card" @change="changeTab" @edit="onEdit"> <a-tab-pane v-for="pane in panes" :key="pane.key" :tab="pane.title" :closable="pane.closable"> <keep-alive> <router-view v-if="activeKey === pane.key"></router-view> </keep-alive> </a-tab-pane> </a-tabs> ``` 通过在a-tab-pane组件添加v-if="activeKey === pane.key"的判断条件,可以实现根据activeKey的值来控制tab的开关状态。只有当当前tab的key与activeKey相等时,才会渲染对应的内容。这样就可以实现在a-tabstab添加开关的效果。引用提供了在Vue中使用Ant Design的a-tabs组件的示例代码,引用介绍了使用vue实现tab滚动固定在顶部的方法,可以作为参考。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [antd-vue使用--tabs切换重复触发事件](https://blog.csdn.net/weixin_45377314/article/details/114387960)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [vue tab滚动到一定高度,固定在顶部,点击tab切换不同的内容操作](https://download.csdn.net/download/weixin_38553837/12924922)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值