uniapp封装双tabbar,封装axios

环境:

本人使用HBuiled X进行开发。下载地址:https://www.dcloud.io/hbuilderx.html

使用微信开发者工具进行调试。下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

项目搭建:

新建项目

选择模板——>填写项目名称

完成

项目目录简介:

在工具菜单下找到插件安装安装所需插件:

使用微信开发者工具需要设置开启服务端口:(下图)

真机调试:

真机测试需要调整手机端开启开发者模式下的USB调试。设置—》系统—》关于手机—》三连击版本号开启开发者模式;

在手机设置下搜索开发者选项,进去之后开启USB调试。

 

封装的ajax请求:

const baseUrl = '后端地址'; 

const httpRequest = (opts, data) => {
let httpDefaultOpts = {
url: baseUrl+opts.url,
data: data,
method: opts.method,
header: opts.method == 'get' ? {
'X-Requested-With': 'XMLHttpRequest',
"Accept": "application/json",
"Content-Type": "application/json; charset=UTF-8"
} : {
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
dataType: 'json',
}
let promise = new Promise(function(resolve, reject) {
uni.request(httpDefaultOpts).then(
(res) => {
resolve(res[1])
}
).catch(
(response) => {
reject(response)
}
)
})
return promise
};
//带Token请求
const httpTokenRequest = (opts, data) => {
    debugger;
let token = uni.getStorageSync('storage_key');
//此token是登录成功后后台返回保存在storage中的
let httpDefaultOpts = {
url: baseUrl+opts.url,
data: data,
method: opts.method,
header: opts.method == 'get' ? {
'Token': token,
'X-Requested-With': 'XMLHttpRequest',
"Accept": "application/json",
"Content-Type": "application/json; charset=UTF-8"
} : {
'Token': token,
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
dataType: 'json',
}
let promise = new Promise(function(resolve, reject) {
uni.request(httpDefaultOpts).then(
(res) => {
resolve(res[1])
}
).catch(
(response) => {
reject(response)
}
)
})
return promise
};

export default {
baseUrl,
httpRequest,
httpTokenRequest    
}

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

main.js中定义全局http:

方法中使用请求:

var opts={
                                        url: '接口地址',
                                        method: 'post'
                                    };
                                    var param={
                                        userName:_self.account,
                                        password:_self.password
                                    };
                                    this.$http.httpRequest(opts, param).then(res => {
                                       var msg = res.data.msg;
                                       var token = res.data.token;
                                       if(res.data.code == "200"){
                                           //保存后台返回的token
                                        uni.setStorageSync('storage_key', token);
                                        //跳转页面
                                           uni.switchTab({
                                                   url:'../tabbar/home/home'
                                           });
                                       }else{
                                               uni.showToast({
                                                   title: msg,
                                                   duration: 2000,
                                                   icon:"none"
                                               })
                                       }
                                        
                                    },error => {console.log(error);})

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在原有的tabbar下模拟一个新的tabbar:

新建文件如下

pages文件下的是你的页面内容。

index下代码是模拟tabbar的代码:代码如下

<template>
    <view class="content">
        <homePage v-if="page_code=='home'"></homePage>
        <infoPage v-if="page_code=='info'"></infoPage>
        <newsPage v-if="page_code=='news'"></newsPage>
        <myPage v-if="page_code=='my'"></myPage>
        <footerNav></footerNav>
    </view>
</template>

<script>
    import homePage from "./pages/home_page.vue";
    import infoPage from "./pages/info_page.vue";
    import newsPage from "./pages/news_page.vue";
    import myPage from "./pages/my_page.vue";
    import footerNav from "../../components/footer/footer_nav.vue";
    export default {
        data() {
            return {}
        },
        components: {
            homePage,
            infoPage,
            newsPage,
            myPage,
            footerNav
        },
        
        computed: {
            page_code() {
                return this.$store.state.footer_store.footer_nav[this.$store.state.footer_store.now_page_index].name_code;
            }
        },
        onLoad() {
                        this.$store.dispatch('get_data')
        },
        methods: {
            open_loading() {
                this.$loading()
            }
        }
        
    }
</script>

<style>
     
    .content {
        text-align: center;
        padding-bottom: 400upx;
    }

    .logo {
        height: 200upx;
        width: 200upx;
        margin-top: 200upx;
    }

    .title {
        font-size: 36upx;
        color: #8f8f94;
    }
</style>

---------------------------------------------------------------------

实现组件:

代码如下:

<template>
    <view>
        <view class="footer">
            <view :class="'footer_item ' + (item.size=='big'?'big_item':'')  " :style="'width:'+item_width" @click="change_nav(index)" v-for="(item,index) in footer_nav" :key="index">
                <image :src="index==now_index?item.select_icon:item.icon" mode=""></image>
                <view>{ {item.name}}</view>
            </view>
        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
            };
        },
        methods:{
            change_nav(index){
                this.$store.commit("change_page",index)
            }
        },
        computed:{
            item_width(){
                let length = this.$store.state.footer_store.footer_nav.length;
                switch (length){
                    case 1:
                        return '100%'
                        break;
                    case 2:
                        return '50%'
                        break;
                    case 3:
                        return '33.3%'
                        break;
                    case 4:
                        return '25%'
                        break;
                    case 5:
                        return '20%'
                        break;
                    default:
                        break;
                }
            },
            footer_nav(){
                return this.$store.state.footer_store.footer_nav
            },
            now_index(){
                return this.$store.state.footer_store.now_page_index;
            }
        }
    }
</script>

<style>
.footer{
    height: 120upx;
    
    position: fixed;
    bottom: 0;
    left: 0;
    width: 100%;
    background-color: #E0E0E0;
    color: #fff;
    
}
.footer_item{
    float: left;
    width: 33.3%;
    text-align: center;
    font-size: 28upx;
    height: 120upx;
 
}
.footer_item image{
    width: 60upx;
    height: 60upx;
}
.footer_item.big_item{
    position: relative;
    top: -40upx;
}
.footer_item.big_item image{
    width: 100upx;
    height: 100upx;
}
</style>
----------------------------------------------------------------------------------------

pages.json  配置地址

现在就可以了。

后续会有其他的更新。

猜你喜欢

转载自blog.csdn.net/qq_41992943/article/details/103313243