uni-app小程序首页index获取不到app中动态设置的gl

2020-01-04  本文已影响0人  醉笙情丶浮生梦

方式一:由页面定义 app 里的回调函数
app.vue

methods: {
    getLogin() {
        let that = this;
        uni.login({
            success: function(res) {
                console.log('默认登录', res);
                if (res.code) {
                    const params = {
                        code: res.code,
                        // #ifdef MP-ALIPAY
                        type: 2,
                        // #endif
                        // #ifdef MP-WEIXIN
                        type: 1
                        // #endif
                    };
                    appModel
                        .login(params)
                        .then(res => {
                            console.log('登录成功', res);
                            that.globalData.token = res.data.token;
                            uni.setStorageSync('token', res.data.token);
                            // 在应用onLaunch时,getApp对象还未获取,暂时可以使用this.$scope.globalData获取globalData。
                            //由于这里是网络请求,可能会在 Page.onLoad 之后才返回  所以此处加入 callback 以防止这种情况
                            console.log('app that', that);
                            if (that.$scope.testDataCallback) {
                                console.log('有回调');
                                that.$scope.testDataCallback(res.data);
                            }
                        })
                        .catch(err => {
                            console.log(err);
                        });
                } else {
                    console.log('获取用户登录态失败!' + res.errMsg);
                }
            },
            fail: function() {
                uni.showToast({
                    title: '登录失败',
                    icon: 'none'
                });
            }
        });
    }
}

index.vue

onLoad() {
    console.log('测试');
    //判断是否获取到动态设置的globalData
    if (app.globalData.token) {
        console.log('有token');
    } else {
        // 声明回调函数获取app.js onLaunch中接口调用成功后设置的globalData数据
        console.log('没有token',app);
        app.testDataCallback = res => {
            console.log('查看信息', res);
        };
    }
}

方式二:由页面触发 app 里的请求
app.vue

methods: {
    getLogin() {
        let that = this;
        return new Promise((resolve, reject) => {
            uni.login({
                success: function(res) {
                    console.log('默认登录', res);
                    if (res.code) {
                        const params = {
                            code: res.code,
                            // #ifdef MP-ALIPAY
                            type: 2,
                            // #endif
                            // #ifdef MP-WEIXIN
                            type: 1
                            // #endif
                        };
                        appModel
                            .login(params)
                            .then(res => {
                                console.log('登录成功', res);
                                that.globalData.token = res.data.token;
                                uni.setStorageSync('token', res.data.token);
                                resolve(res);
                            })
                            .catch(err => {
                                console.log(err);
                                reject(err);
                            });
                    } else {
                        console.log('获取用户登录态失败!' + res.errMsg);
                    }
                },
                fail: function() {
                    uni.showToast({
                        title: '登录失败',
                        icon: 'none'
                    });
                }
            });
        });
    }
}

index.vue

onLoad() {
    console.log("测试");
    app.getLogin().then(res => {
        console.log('获取成功了吗?', res);
    });
}

参考一: 微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法
参考二:微信小程序 index.js获取app.js异步请求的动态数据

上一篇下一篇

猜你喜欢

热点阅读