小程序action-sheet结合自定义tabbar显示

news/2024/7/20 4:31:51 标签: 小程序, 前端

请添加图片描述
要实现此效果,遇到的问题:背景在电脑端调试的情况正常的情况下,手机端点击事件工单,返回回来的时候action-sheet卡住在屏幕上,点击遮罩层都不消失。更奇怪的是 这种情况并不是每次发生,而是有时候发生,有时候正常。

我思考问题出现在action-sheet的问题身上 在t-design中找了好久控制显示和隐藏的方法。但是都没有用处。最后解决方案如下
在写的自定义bar中

<!--custom-tab-bar/index.wxml-->
<view class="tab-bar">
  <view wx:for="{{list}}" wx:key="index" class="tab-bar-item {{item.bulge?'bulge':''}}" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="switchTab">
    <view wx:if="item.bulge" class="tab-bar-bulge"></view>
    <image class="image" src="{{selected == index ? item.selectedIconPath : item.iconPath}}"></image>
    <!-- <view  wx:if="{{item.text}}" style="color: {{selected === index ? selectedColor : color}}" class="tab-bar-view">{{item.text}}</view> -->
    <view class="tab-bar-view" style="color: {{selected === index ? selectedColor : color}}">{{item.text}}</view>
  </view>
</view>

<!-- <view>
  <t-action-sheet 
  id="childComponent" show-cancel="false" style="position: absolute; top: 0; z-index: 999;"></t-action-sheet>
</view> -->
<!-- <view wx:if="{{showvisble}}"> -->
  <t-action-sheet 
  id="childComponent" visibleFlag="true"></t-action-sheet>
<!-- </view> -->

以上是找的圆形tabbar
可以看到我尝试了用view包裹组件 控制t-action的显示 但是发现在js代码中由于我让action-sheet显示的方法 是父组件获取子组件的id值.子组件的方法 在加了view之后 调用action-sheet 显示的方法失效了 因此我放弃了这个想法 但是 问了很厉害的同事之后 解决了!她操作的我想不通 但神奇的解决问题了 特此记录一下希望我能在记录的时候想通。

   if (url === '/pages/index3/index3') {
        this.selectComponent("#childComponent").handleAction()
      } else {
        wx.switchTab({
          url
        })
      }```js代码


解决方案如下

在她更改了t-design提供的本身的代码 使用wx-if来控制它的显示

```javascript
<t-action-sheet class="t-icon-system-regulation popur-sheet"   style= "color: #3f4146;" id="t-action-sheet"
 bind:selected="handleSelected"
 bind:close="handleclose"
 wx:if="{{visibleFlag}}"
 show-cancel="true"
 cancelText="关闭" />

wx:if="{{visibleFlag}}"这段代码在我的脑海里是不敢和不觉得能实现的 但是能够作用 之前在我的印象里 t-design内部的代码只有api提供的字段能够生效但是 没想到wx:if也能生效

import ActionSheet, { ActionSheetTheme } from 'tdesign-miniprogram/action-sheet/index';

const firstGrid = [
  {
    label: '事件工单',
    icon: 'assignment',
    tickType: '1',
  },
  {
    label: '配置工单',
    icon: 'file-setting',
    tickType: '3',
  },
  {
    label: '变更工单',
    icon: 'refresh',
    tickType: '4',
  },
  {
    label: '报告工单',
    icon: 'system-regulation',
    tickType: '5',
  },
  {
    label: '计划任务',
    icon: 'fact-check',
    tickType: '6',
  },
  {
    label: '定时任务',
    icon: 'alarm-add',
    tickType: '7'
  },

];

Component({
  attached(){
    this.setData({
      visibleFlag:this.properties.visibleFlag1
    })
  },

  properties(){
    visibleFlag:Boolean},
  data:{
    showActionSheetFlag:false,
    visibleFlag:false,
  },

  methods: {
    handleAction() {
      this.setData({
        visibleFlag:true
      })
      ActionSheet.show({
        theme: ActionSheetTheme.Grid,
        selector: '#t-action-sheet',
        context: this,
        items: firstGrid,
      });
      
    },
    handleclose(){
      console.log('关闭');
      this.setData({
        visibleFlag:false
      })
    },
    
    handleSelected(e) {
      console.log(e.detail);
      var ticketType = e.detail.selected.tickType
      console.log("ticketType"+ticketType);
      
      this.handleclose()
      if(e.detail.selected.tickType === '6'){
        wx.navigateTo({
          url: '/pages/newPlanOrder/newPlanOrder?ticketType='+ ticketType,
        })
      }else if (e.detail.selected.tickType === '1' || '3' ||'4'||'5'){
        wx.navigateTo({
          url: '/pages/newOrder/newOrder?ticketType='+ ticketType,
        })
      }
    },
  },
});

可以看到 父组件给子组件传值visibleFlag 在父组件中定义visibleFlag="true"为真 这个时候是可以显示 action-sheet的特性是即使可以显示但是不调用
ActionSheet.show({
theme: ActionSheetTheme.Grid,
selector: ‘#t-action-sheet’,
context: this,
items: firstGrid,
});
这段方法也不会显示 可能是隐藏但是存在 然后点击到tabbar的某个路由
调用子组件的方法可以可以这个时候1.父组件传visibleFlag值为ture handleAction这个方法里visibleFlag也为true 因此可以显示

在进行选择事件之后关闭掉了aciton-sheet 同时跳转界面

  this.handleclose()
      if(e.detail.selected.tickType === '6'){
        wx.navigateTo({
          url: '/pages/newPlanOrder/newPlanOrder?ticketType='+ ticketType,
        })
      }else if (e.detail.selected.tickType === '1' || '3' ||'4'||'5'){
        wx.navigateTo({
          url: '/pages/newOrder/newOrder?ticketType='+ ticketType,
        })
      }

我的误区:我想着跳转过去在关闭
在handleclose()中将visibleFlag设置成为false 这样它就消失了

我的疑惑点:直接不给渲染了重新回到tabbar页面时候点击仍然能够打开?
猜测:没什么猜测 还是想不通 可能是双重保障吧 就是让close不管用 在wx:if 人为给它关闭 至于为什么原生的不管用 wx:if我就不懂了


http://www.niftyadmin.cn/n/5190429.html

相关文章

基于STM32的无线传感器网络(WSN)通信方案设计与实现

无线传感器网络&#xff08;Wireless Sensor Network&#xff0c;简称WSN&#xff09;是由一组分布式的无线传感器节点组成的网络&#xff0c;用于监测和收集环境中的各类物理信息。本文将基于STM32微控制器&#xff0c;设计并实现一个简单的无线传感器网络通信方案&#xff0c…

微信小程序数据传递的方式-页面数据的存取

我们在把数据显示到页面的时候&#xff0c;为了实现良好的互动&#xff0c;都希望在用户点击某个栏目后&#xff0c;获取这个栏目的捆绑数据&#xff0c;然后执行后续的操作。 例如&#xff0c;从数据库里取出对应的记录后&#xff0c;显示在页面上&#xff0c;是一条条的大横条…

腾讯云轻量应用服务器使用场景列举说明

腾讯云轻量应用服务器&#xff08;TencentCloud Lighthouse&#xff09;是新一代开箱即用、面向轻量应用场景的云服务器产品&#xff0c;轻量应用服务器可用于搭建中小型网站、Web应用、博客、论坛、小程序/小游戏、电商、云盘/图床、云端开发测试和学习环境等轻量级、中低负载…

开源mes系统有哪些优势可以助力制造业

由于制造业企业对生产的要求变高&#xff0c;mes制造执行系统已成为制造业生产管理的重要工具。因为mes管理系统的功能强大&#xff0c;集数据分析、智能排产、生产建模、质量管理、生产管理、计划管理、设备管理和绩效考核等功能为一体&#xff0c;为企业提供了全面的生产管理…

腾讯云S5服务器4核8G配置价格表S5.LARGE8性能测评

腾讯云服务器4核8G配置优惠价格表&#xff0c;轻量应用服务器和CVM云服务器均有活动&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;腾讯云百科txybk.com分…

基于SSM的中小型企业财务管理设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Uniapp有奖猜歌游戏系统源码 带流量主

有奖猜歌游戏是一款基于uni-app、uniCloud、uniAD 开发的小游戏,通过猜歌曲、观看广告赚取现金奖励。 本游戏基本特征如下: 1、玩家可以通过猜歌、做任务等方式直接获取现金奖励 2、玩家可以通过猜歌、拆红包、做任务等方式获取金币奖励,当金币累积到一定数量可以兑换现金 3…

基于数据库(MySQL)与缓存(Redis)实现分布式锁

分布式锁 分布式锁&#xff1a;分布式锁是在分布式的情况下实现互斥类型的一种锁 实现分布式锁需要满足的五个条件 可见性&#xff1a;多个进程都能看到结果互斥性&#xff1a;只允许一个持有锁的对象的进入临界资源可用性&#xff1a;无论何时都要保证锁服务的可用性&#x…