方式一:由頁面定義 app 里的回調(diào)函數(shù)
app.vue
methods: {
getLogin() {
let that = this;
uni.login({
success: function(res) {
console.log('默認(rèn)登錄', 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);
// 在應(yīng)用onLaunch時,getApp對象還未獲取,暫時可以使用this.$scope.globalData獲取globalData。
//由于這里是網(wǎng)絡(luò)請求,可能會在 Page.onLoad 之后才返回 所以此處加入 callback 以防止這種情況
console.log('app that', that);
if (that.$scope.testDataCallback) {
console.log('有回調(diào)');
that.$scope.testDataCallback(res.data);
}
})
.catch(err => {
console.log(err);
});
} else {
console.log('獲取用戶登錄態(tài)失??!' + res.errMsg);
}
},
fail: function() {
uni.showToast({
title: '登錄失敗',
icon: 'none'
});
}
});
}
}
index.vue
onLoad() {
console.log('測試');
//判斷是否獲取到動態(tài)設(shè)置的globalData
if (app.globalData.token) {
console.log('有token');
} else {
// 聲明回調(diào)函數(shù)獲取app.js onLaunch中接口調(diào)用成功后設(shè)置的globalData數(shù)據(jù)
console.log('沒有token',app);
app.testDataCallback = res => {
console.log('查看信息', res);
};
}
}
方式二:由頁面觸發(fā) app 里的請求
app.vue
methods: {
getLogin() {
let that = this;
return new Promise((resolve, reject) => {
uni.login({
success: function(res) {
console.log('默認(rèn)登錄', 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('獲取用戶登錄態(tài)失??!' + 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中動態(tài)設(shè)置的globalData的原因以及解決方法
參考二:微信小程序 index.js獲取app.js異步請求的動態(tài)數(shù)據(jù)