typescript - ionic 原生存储在 iOS 上无法工作
我在一个项目中使用 Ionic 3,并且有一个认证系统。当用户想要登录时,我使用本地存储。在 Android 上它可以正常工作,但在 iOS 上,即使使用 platform.ready(),它也会重定向我到登录界面。我看到有好几个人遇到类似的问题,但没有答案,所以我想知道是否有人遇到同样的问题,并且是否找到了解决方案。这是我的代码:
this.plt.ready().then(() => {
this.nativeStorage.setItem('userStorage', { stayConnected: (typeof this.stayConnected == "undefined" || this.stayConnected == false ? '' : 'stayConnected'), userId: (result as any).id, userLogin: (result as any).login })
.then(
() => {
this.loader.dismiss();
this.navCtrl.setRoot(HomePage);
},
error => {
this.loader.dismiss();
this.presentToast(this.languageLogin.error, 3000, "bottom");
}
)
},
error => {
this.loader.dismiss();
this.presentToast(this.languageLogin.error, 3000, "bottom");
});
谢谢你的回答。
答案#1
我会把两个函数 storeUser() 和 getUser() 放到同一个提供者 UserService 中,如下所示。然后将 UserService 添加到任何需要的页面的构造函数中。它适用于 IOS、Android 和网页。
import {Storage} from '@ionic/storage';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class UserService {
constructor(private storage: Storage){}
public storeUser(userData): void {
this.storage.set('userData', userData);
}
public getUser(): Observable<any>
return Observable.fromPromise(this.storage.get('userData').then((val) => {
return !!val;
}));
}
答案#2
是的,我在使用 Ionic 原生存储插件时遇到了一些问题。所以我转向使用 JavaScript 的 Window localStorage 属性,它工作得完全正常。
将数据保存到 localStorage 的语法:
localStorage.setItem("key", "success");
从 localStorage 读取数据的语法:
var lastname = localStorage.getItem("key");
从 localStorage 中移除数据的语法:
localStorage.removeItem("key");
现在你可以用这个属性来编写代码,像这样 -
if (lastname == "success"){
this.navCtrl.setRoot(HomePage);
} else{
alert("Not matched")
}
