Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 离子-从本地存储中删除对象_Typescript_Ionic Framework - Fatal编程技术网

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

Typescript 离子-从本地存储中删除对象,typescript,ionic-framework,Typescript,Ionic Framework,我目前正在为我的Ionic应用程序使用本地存储。我可以从本地存储添加和获取数据,但当我尝试删除特定对象时,数据库中的所有内容都会被删除。当我尝试在我的(现在为空)DB中添加新对象时,会收到错误消息: “运行时错误-无法读取未定义的属性“push” 应用程序用户场景是,用户将最喜爱的电视节目添加到收藏夹列表中,如果需要,可以从中删除最喜爱的电视节目 以下是我的服务中的代码,其中包含localstorage的函数: export class FavoritesService{ construc

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

应用程序用户场景是,用户将最喜爱的电视节目添加到收藏夹列表中,如果需要,可以从中删除最喜爱的电视节目

以下是我的服务中的代码,其中包含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();
  }
}

您使用的数据如下所示:

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个条目。是否提供任何反馈?