uniappはあまり使いませんが、本当に大きな落とし穴に遭遇しました、丸一日かかりました、内容が間違っていたらご指摘、修正してください。
問題は、uniapp ではストレージに保存されている user_id を取得する必要があるのですが、常に this.user_id をバインドできないことです。
問題のあるプログラムの例:
onLoad(){
this.get_user_id()
console.log(this.user_id) //测试输出
},
methods:{
get_user_id(){
uni.getStorage({
key: 'user_id',
success: function (res) {
console.log(res.data);//内部测试
this.user_id=res.data
}
});
}
}
テスト出力は空ですが、内部テストには内容があり、関数内でリダイレクトされることを考慮してアロー関数に変更しました
onLoad(){
this.get_user_id()
console.log(this.user_id) //测试输出
},
methods:{
get_user_id(){
uni.getStorage({
key: 'user_id',
success: (res)=> { //改成箭头函数
console.log(res.data);//内部测试
this.user_id=res.data
}
});
}
}
しかし、それは役に立たず、空のままです。おそらく、問題は、onload関数内でonload関数がシーケンシャルに実行されるにもかかわらず、uni.getstorageが非同期であるため、値がまったく取得されないことです。
そこで、同期して取得するように変更しました
onLoad(){
this.get_user_id()
console.log(this.user_id) //测试输出
},
methods:{
get_user_id(){
uni.getStorageSync({
key: 'user_id',
success: (res)=> { //改成箭头函数
console.log(res.data);//内部测试
this.user_id=res.data
}
});
}
}
しかし、テストにはまだ問題があり、出力テストすら出力されないので、仕方がないので、uniappの公式サイトを探して、最終的にこれにバインドする方法に変更しました。
onLoad(){
this.get_user_id()
console.log(this.user_id) //测试输出
},
methods:{
get_user_id(){
this.user_id=uni.getStorageSync('user_id')
}
}
問題が解決しました。