微信小程序---底部固定导航栏tabBar

本文详细介绍了app.json文件的配置项,特别是如何通过tabBar配置来实现小程序底部导航栏的个性化定制,包括颜色、背景色及导航条目的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

app.json文件:

{
  "pages": [  
    "pages/index/index",
    "pages/logs/logs",
    "pages/samplereels/samplereels",
    "pages/discover/discover",
    "pages/shop/shop",
    "pages/person/person"
  ],
  "window": {
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#fff",
    "navigationBarTitleText": "WeChat",
    "navigationBarTextStyle": "black"
  },
  "tabBar": {
    "color": "#2f2f2f",
    "selectedColor": "#216d8d",
    "backgroundColor": "#ffffff",
    "borderStyle": "black",
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页",
        "iconPath": "images/tap_bar_01.png",
        "selectedIconPath": "images/tap_bar_01_active.png"
      },
      {
        "pagePath": "pages/samplereels/samplereels",
        "text": "分类",
        "iconPath": "images/book1.png",
        "selectedIconPath": "images/book2.png"
      },
      {
        "pagePath": "pages/discover/discover",
        "text": "发现",
        "iconPath": "images/tap_bar_02.png",
        "selectedIconPath": "images/tap_bar_02_active.png"
      },
      {
        "pagePath": "pages/shop/shop",
        "text": "商店",
        "iconPath": "images/tap_bar_03.png",
        "selectedIconPath": "images/tap_bar_03_active.png"
      },
      {
        "pagePath": "pages/person/person",
        "text": "我的",
        "iconPath": "images/tap_bar_04.png",
        "selectedIconPath": "images/tap_bar_04_active.png"
      }
    ],
    "position":"bottom"
  }
}

tabBar : 设置底部的tab导航栏的样式属性。
color :底部导航栏未选择时的文字。
selectedColor:底部导航栏选中时的文字。
backgroundColor:底部导航栏的背景色。
borderStyle:底部导航栏上边框的颜色,只支持 black/white,默认black。
position:tabbar的位置,可选值 bottom、top,默认为bottom,当设置为top时,将不会显示icon。
list:导航配置的数组,最少2个,最多5个。
list数组对象:
pagePath:页面显示路径
text:导航上的文字
iconPath:图标路径,导航未选中时
selectedIconPath:选中时的图片路径

### Taro框架中实现页面跳转拦截功能的方法 在Taro框架中,实现页面跳转的拦截功能可以通过监听路由变化来完成。Taro提供了`onShow`和`onHide`生命周期方法,以及`Taro.addInterceptor`方法,可以用于拦截页面跳转并执行自定义逻辑[^4]。以下是一个完整的实现方案: #### 1. 使用`Taro.addInterceptor`拦截页面跳转 Taro框架支持通过`Taro.addInterceptor`方法对API进行拦截。可以利用此方法拦截`navigateTo`、`redirectTo`等页面跳转API,并在跳转前添加自定义逻辑。 ```javascript import Taro from '@tarojs/taro'; // 拦截 navigateTo 和 redirectTo 方法 Taro.addInterceptor((api, args) => { if (api.name === 'navigateTo' || api.name === 'redirectTo') { const { url } = args; // 在这里添加自定义逻辑,例如检查用户是否登录 if (!isUserLoggedIn()) { Taro.showToast({ title: '请先登录', icon: 'none', }); return false; // 阻止跳转 } } return args; // 继续执行跳转 }); function isUserLoggedIn() { // 示例:从存储中获取登录状态 const token = Taro.getStorageSync('token'); return !!token; } ``` #### 2. 监听路由变化 除了使用`Taro.addInterceptor`外,还可以通过监听页面的`onShow`生命周期方法来监听路由变化,并在页面显示时执行拦截逻辑。 ```javascript export default class Index extends Taro.Component { componentDidShow() { // 在页面显示时执行拦截逻辑 if (!isUserLoggedIn()) { Taro.showToast({ title: '请先登录', icon: 'none', }); Taro.navigateTo({ url: '/pages/login/index' }); // 跳转到登录页 } } render() { return <View>欢迎访问主页</View>; } } function isUserLoggedIn() { const token = Taro.getStorageSync('token'); return !!token; } ``` #### 3. 结合全局状态管理 如果项目中使用了全局状态管理工具(如Redux或MobX),可以在拦截器中直接调用全局状态来判断用户的登录状态。 ```javascript import Taro from '@tarojs/taro'; import { useSelector } from 'react-redux'; Taro.addInterceptor((api, args) => { if (api.name === 'navigateTo' || api.name === 'redirectTo') { const isLoggedIn = useSelector(state => state.user.isLoggedIn); if (!isLoggedIn) { Taro.showToast({ title: '请先登录', icon: 'none', }); return false; } } return args; }); ``` ### 注意事项 - 如果项目中存在大量基于Hooks开发的页面,需要手动为每个页面添加显示隐藏的设置代码[^3]。 - 拦截逻辑应尽量简单,避免影响用户体验。例如,不要在频繁触发的路由变化中执行耗时操作。 - 对于复杂的拦截需求,建议结合全局状态管理和路由监听,以确保逻辑清晰且易于维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

LLL_LH

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

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

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

打赏作者

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

抵扣说明:

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

余额充值