【antd-vue】 tab切换前根据情况判断是否允许切换或【vue】中如何拦截阻断antd-vue tab组件切换

这个需求困扰了我几天,因为我的需求是tab切换前判断当前页是否有未保存的内容,有未保存的内容要提示未保存,用户选择离开才可以切换tab。

百度了一大圈,只有一篇说如何拦截阻断element-ui里的tab,有一个触发前的钩子函数,将逻辑写在这个函数里

在这里插入图片描述
搜不到和antd-vue 的tab拦截阻断有关的办法,有几篇提问的文章前两年问的,一直没有人回复过。
抱着试试的态度,我自己发了问答贴,感谢热心的大佬提供了回答。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果你也遇到了类似的需求,并且看到我这篇文章,我觉得你可以试试他们说的思路,我自己想了一下觉得不太适合我自己,经过朋友的帮助,想出了另一种解决的思路。

思路大致如下:

利用vuex保存数据的特性,在state中定义数据,在mutations中修改数据,只能使用vuex内部的方法改变数据这一点很重要,将tab的activeKey对应vuex中保存的数据,当未保存提示后,确认可以切换的时候,触发vuex保存数据的方法,将点击项的key传到方法里,这样tab绑的值都是通过手动改变。

下面就是具体的代码实现了,只保留和切换有关的,其他的就不展示了,没有必要去理解我整个的项目需求,功能能实现就行
首先在state文件夹的index文件中定义数据和操作数据的方法

   state: {   
    active: 0,
    },
    mutations: {
 
  Update_active(state,data){
    state.active = data
  },
  }

在tab所在的页面,给activakey绑值

 <a-tabs
          :activeKey="$store.state.active"
          :tabBarStyle="{ padding: '0 24px' }"
          @change="(key) => onTabChange(key)"
        >
          <a-tab-pane :key="0" tab="xxx" style="padding: 0 28px">
            <api-info-editor  ref="one" v-if="$store.state.active == 0"></api-info-editor>
          </a-tab-pane>
          <a-tab-pane :key="1" tab="xxx" style="padding: 0 28px">
            <api-docs-editor
               v-if="$store.state.active == 1"
              ref="second"              
            ></api-docs-editor>
          </a-tab-pane>
          <a-tab-pane :key="2" tab="xxx" style="padding: 0">
            <api-parameter-config
               v-if="$store.state.active == 2"
              ref="three"       
            ></api-parameter-config>
          </a-tab-pane>          
 </a-tabs>

在onTabChange事件里改变值

    onTabChange(key) {    
      switch (this.$store.state.active) {
        case 0:
          if (this.$refs.one.apichooseFlag) {           
            this.$confirm(`你有未保存数据项, 是否确认离开?`, '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning',
            }).then(() => {
              // 改变vuex的值
              this.$store.commit('Update_active', key)//如果确认离开,改变vuex的值并且刷新数据            
              this.getDetaildata(this.documents || { fInApibaseId: this.$route.query.apiId })
            })
          } else {
            this.$store.commit('Update_active', key)//如果取消,还是要重新保存一下值
          }
          break
        case 1:
          if (this.$refs.second.apidocsFlag) {
            this.$confirm(`你有未保存数据项, 是否确认离开?`, '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning',
            }).then(() => {
              this.$store.commit('Update_active', key)
              this.getquerydocs()       
              this.$refs.second.apidocsFlag = false
            })
          } else {
            this.$store.commit('Update_active', key)
          }
          break
        case 2:
          if (this.$refs.three.apiparamFlag) {
            this.$confirm(`你有未保存数据项, 是否确认离开?`, '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning',
            }).then(() => {
              this.$store.commit('Update_active', key)
              this.$refs.three.apiparamFlag = false
              this.getDetaildata(this.documents || { fInApibaseId: this.$route.query.apiId })              
            })
          } else {
            this.$store.commit('Update_active', key)
          }
          break       
        default:
          break
      }
    },
### 回答1: antd-mobile-vue是一个基于Vue.js框架的移动端组件库,它提供了一系列UI组件,用于开发高质量的移动端应用。 与其它UI组件库相比,antd-mobile-vue具有以下优势和特点: 1. 高质量的组件antd-mobile-vue提供了丰富的移动端UI组件,如按钮、表单、弹窗、导航等,这些组件都经过了精心设计和开发,具有统一的风格和良好的用户体验。 2. 灵活的布局:antd-mobile-vue提供了灵活的布局组件,如栅格布局、Flex布局,可帮助开发者快速搭建页面结构,并自适应不同的屏幕尺寸。 3. 易于使用和扩展:antd-mobile-vue组件使用简单,开发者可以通过简单的配置和参数就可以实现复杂的交互效果。而且,antd-mobile-vue组件提供了丰富的扩展能力,可以根据项目需求进行个性化的定制。 4. 生态丰富:antd-mobile-vue拥有庞大的开发者社区和活跃的维护团队,开发者可以通过官方文档和社区资源获取帮助和支持。此外,antd-mobile-vue还与其它Vue.js生态工具和库良好地兼容,如Vue Router、Vue CLI等。 5. 支持国际化:antd-mobile-vue提供了多语言支持,开发者可以根据项目需求灵活地切换多种语言环境。 总之,antd-mobile-vue是一个功能强大、易于使用和扩展的移动端组件库,它可以帮助开发者快速构建高质量的移动端应用,提高开发效率和用户体验。 ### 回答2: antd-mobile-vue是一种基于Vue.js框架的移动端UI库。它是对Ant Design Mobile的Vue组件实现的封装和扩展,旨在为开发者提供高质量、易用性的移动端组件库,帮助快速开发移动应用程序。 antd-mobile-vue提供了丰富的移动端UI组件,如按钮、导航栏、标签栏、列表、表单等,可以满足日常开发绝大部分的界面需求。这些组件都经过精心设计和优化,在视觉和交互上都符合当移动端的设计原则和用户体验。而且,它还提供了灵活的定制和扩展能力,允许开发者根据具体需求进行个性化定制,提高开发效率和用户体验。 除了UI组件外,antd-mobile-vue还提供了一些实用的工具和功能,如样式工具库、语言国际化、路由管理等。这些工具和功能都是为了让开发者更方便地进行移动应用开发,减少重复性的工作,提高开发效率。 antd-mobile-vue拥有广泛的社区支持和文档资料,开发者可以从社区获取帮助和解决问题,学习和掌握使用该库的技巧和最佳实践。同时,antd-mobile-vue还提供了详细的官方文档和示例代码,方便开发者快速入手和上手该库。 总之,antd-mobile-vue是一款功能强大、易用性强的移动端UI库,适用于各种移动应用的开发。无论是个人开发者还是团队开发,都可以通过使用antd-mobile-vue来快速构建高质量的移动应用程序。 ### 回答3: antd-mobile-vue 是一个基于 Vue.js 的移动端 UI 组件库,它提供了丰富的移动端组件和样式风格,可以帮助开发者快速构建优雅的移动端应用。 antd-mobile-vue 的特点有以下几个方面: 1. 高度可定制:antd-mobile-vue 提供了大量的组件,涵盖了移动端常见的UI元素,如按钮、导航栏、表单等,这些组件的样式和交互行为都可以通过配置进行定制,满足不同项目的需求。 2. 兼容性强:antd-mobile-vue 提供了对不同移动端浏览器和操作系统的支持,保证组件在不同环境下的正常运行和展示,同时也保证了用户的使用体验。 3. 特色设计:antd-mobile-vue 的设计风格简洁、现代,符合移动端用户的审美要求,同时也遵循了 Material Design 和 iOS Human Interface Guidelines 等设计准则,保证了用户的熟悉感和易用性。 4. 文档丰富:antd-mobile-vue 提供了详细的文档和示例代码,开发者可以根据文档了解组件的使用方法和配置参数,快速上手使用。 5. 生态丰富:antd-mobile-vue 是基于 Ant Design Mobile(antd-mobile)的 Vue 实现,可以与其它 Vue 生态工具和插件无缝集成,如 Vue Router、Vuex 等,方便开发者构建复杂的移动应用。 总之,antd-mobile-vue 是一个强大而灵活的移动端 UI 组件库,它可以帮助开发者节省时间和精力,快速开发出高质量的移动应用。无论是个人项目还是企业应用,都可以考虑使用这个库来提升开发效率和用户体验。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值