离子 - 从本地存储中删除对象

时间:2017-10-28 11:40:57

标签: typescript ionic-framework

我目前正在为我的Ionic应用程序使用本地存储。我可以从本地存储添加和获取数据,但是当我尝试删除特定对象时,我的数据库中的所有内容都将被删除。当我尝试在我的(现在为空)DB中添加一个新对象时,我收到错误消息: "运行时错误 - 无法读取属性'推送'未定义"

应用用户场景是用户将喜爱的电视节目添加到收藏夹列表中,如果需要,可以从那里获得。

这是我服务中的代码,其中包含localstorage的功能:

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();
  }
}

1 个答案:

答案 0 :(得分:0)

您正在使用以下数据:

  • 修改favoritesSeries
  • favoritesSeries保存为FavSerie
  • 存储

这很好,但您的方法removeFavoriteSeries的工作方式如下:

  • 从DB
  • 中删除FavSerie(这是您的系列数组)
  • favoritesSeries设置为storage.remove
  • 返回的承诺解析的内容

要修复您的代码,您可以将removeFavoriteSeries修改为:

removeFavoriteSeries(serie: any){
    this.favoritesSeries = this.favoritesSeries.filter(s => s !== serie);
    this.saveChanges(this.favoritesSeries);
}

这是做什么的:

  • 编辑包含所有系列
  • favoritesSeries列表
  • 将(现已更改的)favoritesSeries保存到存储

这与编辑系列列表的其余代码一致。

现在,当您调用removeFavoriteSeries方法并为其提供要删除的serie时,它会将其删除。

另外,您应该考虑为您的系列对象设置固定类型。如果favoritesSeries是一个固定类型的数组,你可能在编译时看到了这个错误。

修改

现在您应该修改onRemoveFromFavorites课程中的Favorites

而不是this.favoritesService.removeFavoriteSeries();,它应该是this.favoritesService.removeFavoriteSeries(FavSerie);

通过此操作,您将转移到您要移除的FavoritesService系列。

另外,您应该像这样编辑addSeriesToFavorites

addSeriesToFavorites(serie: any)
{
    this.favoritesSeries.push(serie);
    console.log('Add to');
    console.log(this.favoritesSeries);
    this.saveChanges(this.favoritesSeries); // <- use the saving method

}