Typescript 离子-从本地存储中删除对象
我目前正在为我的Ionic应用程序使用本地存储。我可以从本地存储添加和获取数据,但当我尝试删除特定对象时,数据库中的所有内容都会被删除。当我尝试在我的(现在为空)DB中添加新对象时,会收到错误消息: “运行时错误-无法读取未定义的属性“push” 应用程序用户场景是,用户将最喜爱的电视节目添加到收藏夹列表中,如果需要,可以从中删除最喜爱的电视节目 以下是我的服务中的代码,其中包含localstorage的函数:Typescript 离子-从本地存储中删除对象,typescript,ionic-framework,Typescript,Ionic Framework,我目前正在为我的Ionic应用程序使用本地存储。我可以从本地存储添加和获取数据,但当我尝试删除特定对象时,数据库中的所有内容都会被删除。当我尝试在我的(现在为空)DB中添加新对象时,会收到错误消息: “运行时错误-无法读取未定义的属性“push” 应用程序用户场景是,用户将最喜爱的电视节目添加到收藏夹列表中,如果需要,可以从中删除最喜爱的电视节目 以下是我的服务中的代码,其中包含localstorage的函数: export class FavoritesService{ construc
export class FavoritesService{
constructor(private storage: Storage){}
public favoritesSeries: any = [];
addSeriesToFavorites(serie: any)
{
this.favoritesSeries.push(serie);
console.log('Add to');
console.log(this.favoritesSeries);
this.storage.set('FavSerie',this.favoritesSeries);
}
getFavoriteSeries(){
this.favoritesSeries = [];
this.storage.get('FavSerie').then((val) => {
console.log(val);
if (val){
this.favoritesSeries = val;
}});
}
removeFavoriteSeries(){
this.storage.remove('FavSerie').then((val)=>{
this.favoritesSeries = val
console.log('serie is removed');
});
}
saveChanges(favoriteSeries: any) {
this.favoritesSeries = favoriteSeries;
this.storage.set('favoriteSeries', this.favoritesSeries);
}
}
我的收藏夹页面:
export class Favorites {
series: {};
constructor(public navCtrl: NavController,
public navParams: NavParams,
public seriesService: SeriesService,
public alertCtrl: AlertController,
public favoritesService: FavoritesService) {
}
ionViewDidLoad() {
//presents the favorite series
this.series = this.favoritesService.favoritesSeries;
console.log(this.favoritesService.favoritesSeries);
console.log(this.series);
}
onRemoveFromFavorites(FavSerie: any){
const alert = this.alertCtrl.create({
title: 'Remove From Favorites',
subTitle: 'Are you sure?',
message: 'Are you sure you want to remove from favorites?',
buttons: [
{
text: 'Yes',
handler: () => {
console.log('OK');
console.log(FavSerie);
this.favoritesService.removeFavoriteSeries();
console.log('efter service addToFavorite');
}
},
{
text: 'No',
role: 'cancel',
handler: () => {
console.log('Cancel');
}
}
]
});
alert.present();
}
}
您使用的数据如下所示:
addSeriesToFavorites(serie: any)
{
this.favoritesSeries.push(serie);
console.log('Add to');
console.log(this.favoritesSeries);
this.saveChanges(this.favoritesSeries); // <- use the saving method
- 编辑
收藏夹系列
- 将
另存为favoritesSeries
FavSerie
removeFavoriteSeries
的工作原理如下:
addSeriesToFavorites(serie: any)
{
this.favoritesSeries.push(serie);
console.log('Add to');
console.log(this.favoritesSeries);
this.saveChanges(this.favoritesSeries); // <- use the saving method
- 从数据库中删除FavSerie(您的系列数组)
- 将
设置为从收藏夹序列
存储返回的承诺所解决的任何问题。删除
removeFavoriteSeries
编辑为:
removeFavoriteSeries(serie: any){
this.favoritesSeries = this.favoritesSeries.filter(s => s !== serie);
this.saveChanges(this.favoritesSeries);
}
它的作用是:
- 编辑包含所有系列的
列表收藏夹系列
- 将(现在更改的)
保存到存储器中收藏夹序列
removeFavoriteSeries
方法并为其指定要删除的serie
时,它将删除它
请注意,你确实应该考虑为你的Selee对象设置一个固定类型。如果favoritesSeries
是一个固定类型的数组,则在编译时可能会看到此错误
编辑:
现在,您应该在您的收藏夹
类中编辑关于从收藏夹中移除的:
而不是this.favoriteService.removeFavoriteService()代码>应该是this.favoriteService.removeFavoriteSeries(FavSerie)代码>
这样,您就可以将要删除的序列传递给您的收藏夹服务
此外,您还应该像这样编辑您的addSeriesToFavorites
:
addSeriesToFavorites(serie: any)
{
this.favoritesSeries.push(serie);
console.log('Add to');
console.log(this.favoritesSeries);
this.saveChanges(this.favoritesSeries); // <- use the saving method
addSeriesToFavorites(serie:any)
{
这个.favoritesSeries.push(serie);
console.log('Add to');
console.log(this.favoritesSeries);
this.saveChanges(this.favoritesSeries);//这几乎奏效了!当我按下“Unfavorite”时,它会在我的数据库中保存一个新的favoriteSeries数组。但是,如果我在浏览器中刷新页面,我仍然会在列表中看到我的所有序列。此外,我的favorites.ts文件的工作方式与我在原始帖子中显示的方式不同。删除序列的方法是红色的,并显示:“提供的参数与呼叫目标的任何签名都不匹配”。为什么我不应该发送我的FavSerie数组?你应该编辑onRemoveFromFavorites
。我在答案中添加了使用示例。更进一步!它仍然会删除我列表中的所有内容,即使我只按了“unfavorite”"在一个系列中。但至少我在删除到系列中时添加新系列的问题解决了,我不再收到相同的错误。我的DB现在是这样的:很高兴听到我回答了你的问题。你现在描述的问题似乎是一个新问题的主题。我再次查看了代码并编辑了我的答案,以便代码继续使用e方法进行保存和添加。使用此方法,您的数据库中应该不再有2个条目。是否提供任何反馈?