离子本机存储不适用于 iOS
ionic native storage does not work on 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");
});
感谢您的回答。
是的,我在使用 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")
}
我会将 2 个函数 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;
}));
}
你在platform.ready()
里面,很好。存储包还有一个您可能想要利用的 .ready()
,它专门检查存储本身是否准备就绪。如果它在启动时运行,则很有可能正在初始化存储。
此外,这开始陷入一些疯狂的承诺链混乱。我建议深入 async/await。类似于下面的(未经测试的)代码。
try{
await this.plt.ready();
await this.nativeStorage.ready();
let stayConnectedValue = (this.stayConnected) ? 'stayConnected' : '';
await this.nativeStorage.setItem('userStorage', { stayConnected: stayConnectedValue , userId: (result as any).id, userLogin: (result as any).login });
this.navCtrl.setRoot(HomePage);
}
catch(err){
this.presentToast(this.languageLogin.error, 3000, "bottom");
}
finally{
this.loader.dismiss();
}
我在我的一个带有身份验证系统的项目中使用了 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");
});
感谢您的回答。
是的,我在使用 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")
}
我会将 2 个函数 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;
}));
}
你在platform.ready()
里面,很好。存储包还有一个您可能想要利用的 .ready()
,它专门检查存储本身是否准备就绪。如果它在启动时运行,则很有可能正在初始化存储。
此外,这开始陷入一些疯狂的承诺链混乱。我建议深入 async/await。类似于下面的(未经测试的)代码。
try{
await this.plt.ready();
await this.nativeStorage.ready();
let stayConnectedValue = (this.stayConnected) ? 'stayConnected' : '';
await this.nativeStorage.setItem('userStorage', { stayConnected: stayConnectedValue , userId: (result as any).id, userLogin: (result as any).login });
this.navCtrl.setRoot(HomePage);
}
catch(err){
this.presentToast(this.languageLogin.error, 3000, "bottom");
}
finally{
this.loader.dismiss();
}