zoukankan      html  css  js  c++  java
  • uni项目踩坑 判断进入的域名链接 动态显示tabbar

    项目需求:

    1.两个不同域名进入到该项目中,通过不同的域名进行判断动态的展示tabbar菜单(菜单上有的点击跳转是外部链接,有的是本项目的页面)
    2.如果是一个固定域名进入的 显示第二个菜单选中,如果不是的话不显示选中状态

    难点:

    1.uni下的pages.json中的tabbar的list数组只有一个,且不能写成动态的
    2.怎么获取到来的时候的url链接(点击跳转的是统一链接,不能通过href或者host来获取)

    3.菜单点击还要进入相应的链接和页面(动态的)

    思路:

    1.在页面入口文件进行document.referrer判断 分割取到域名(还可以通过和后端沟通跳转携带参数来判断),设置全局变量

    2.把pages.json中的tabbar的list设置为空,不适用系统自带的tabbar

    3.新建一个vue文件,设置为全局组件,在需要显示菜单的页面中进行引入显示,定义好props为了显示选中哪个,里面循环的数组设置为变量,通过上面的全局变量进行动态显示,使用uni.navigateTo进行跳转

    <template>
        <view class="tab-bar">
            <view v-for="(item,index) in list" :key="index" class="tab-bar-item" @click="switchTab(item, index)">
                <image class="tab_img" :src="selected == index ? item.selectedIconPath : item.iconPath"></image>
                <view class="tab_text" :style="{color: selected === index ? selectedColor : color}">{{item.text}}</view>
            </view>
        </view>
    </template>
    
    
    
    <script>
        export default {
            props: {
                selected: { // 当前选中的tab index
                    type: Number,
                    default: 0
                },
                userIdentity: { // 当前角色
                    type: Number,
                    default: 0
                }
    
            },
            data() {
                return {
                    color: "#666666",
                    selectedColor: "#666666",
                    list: []
                }
            },
            created() {
                var _this = this
                    _this.list = [
                        {
                            "pagePath": "/pages/enterMYUrl/shangcheng/index",
                            "iconPath": "/static/enterMYUrl/home.png",
                            "selectedIconPath": "/static/enterMYUrl/home_select.png",
                            "text": "商城首页"
                        },
                        {
                            "pagePath": "/pages/enterMYUrl/yunyaofang/index",
                            "iconPath": "/static/enterMYUrl/pharmacy.png",
                            "selectedIconPath": "/static/enterMYUrl/pharmacy_click.png",
                            "text": "云药房"
                        },
                        {
                            "pagePath": "/pages/enterMYUrl/gouwuche/index",
                            "iconPath": "/static/enterMYUrl/cart.png",
                            "selectedIconPath": "/static/enterMYUrl/cart_click.png",
                            "text": "购物车"
                        },
                        {
                            "pagePath": "/pages/enterMYUrl/home/index",
                            "iconPath": "/static/enterMYUrl/my.png",
                            "selectedIconPath": "/static/enterMYUrl/my_click.png",
                            "text": "个人中心"
                        }
                    ]
                } else {
                    _this.list = [{
                            "pagePath": "/pages/enterUrl/home/index",
                            "iconPath": "/static/enterMYUrl/home.png",
                            "selectedIconPath": "/static/enterMYUrl/home_select.png",
                            "text": "中基云医"
                        },
                        {
                            "pagePath": "/pages/home/index/index",
                            "iconPath": "/static/enterMYUrl/pro.png",
                            "selectedIconPath": "/static/enterMYUrl/pro_click.png",
                            "text": "专家问诊"
                        },
                        {
                            "pagePath": "/pages/patientvisit/index",
                            "iconPath": "/static/enterMYUrl/wenzhen.png",
                            "selectedIconPath": "/static/enterMYUrl/wenzhen_click.png",
                            "text": "我的问诊"
                        },
                        {
                            "pagePath": "/pages/enterUrl/shop/index",
                            "iconPath": "/static/enterMYUrl/shop.png",
                            "selectedIconPath": "/static/enterMYUrl/shop_click.png",
                            "text": "健康商城"
                        },
                        {
                            "pagePath": "/pages/enterUrl/my/index",
                            "iconPath": "/static/enterMYUrl/my.png",
                            "selectedIconPath": "/static/enterMYUrl/my_click.png",
                            "text": "个人中心"
                        }
                    ]
                }
            },
            methods: {
                switchTab(item, index) {
                    let url = item.pagePath;
                    // uni.switchTab({
                    //     url: url
                    // })
                    if (this.$URL_TYPE == "zhongji") {
                        uni.navigateTo({
                            url: url
                        })
                    } else {
                        uni.navigateTo({
                            url: url
                        })
                    }
                }
            }
        }
    </script>
    
    <style lang="scss">
        .tab-bar {
            position: fixed;
            bottom: 0;
            left: 0;
            right: 0;
            height: 100rpx;
            background: white;
            display: flex;
            justify-content: center;
            align-items: center;
            padding-bottom: env(safe-area-inset-bottom); // 适配iphoneX的底部
    
            .tab-bar-item {
                flex: 1;
                text-align: center;
                display: flex;
                justify-content: center;
                align-items: center;
                flex-direction: column;
    
                .tab_img {
                     37rpx;
                    height: 41rpx;
                }
    
                .tab_text {
                    font-size: 20rpx;
                    margin-top: 9rpx;
                }
            }
        }
    </style>
    bar.vue

    注:里面的图片路径要写成绝对路径,不然打包的时候如果是在该项目下的页面会出现层级问题,显示不出来图片

    4.可有可无:<tab-bar :selected="isShow"></tab-bar>
    isShow为变量,通过判断是哪个域名下的 然后不传或者传一个假值给bar.vue组件,就可以不显示菜单了。

    本文仅提供参考,是本人闲时所写笔记,如有错误,还请赐教,作者:阿蒙不萌,大家可以随意转载

  • 相关阅读:
    VMware Workstation 16.0 key (仅支持 intel 架构)
    使用思科ASA对指定端口、IP进行抓包
    轮子的意义
    dubbo学习(三)泛化
    dubbo学习(二)链接
    dubbo学习(一)线程池
    mips交叉编译:SQLite3
    生成证书脚本
    ssh连接不上 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    gmssl ocsp 验证证书
  • 原文地址:https://www.cnblogs.com/huchong-bk/p/15397476.html
Copyright © 2011-2022 走看看