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异步请求的动态数据