2017-10-28 11 views
-1

現在、Ionicアプリのローカルストレージを使用しています。私はローカルストレージからデータを追加して取得することができますが、特定のオブジェクトを削除しようとすると、DB内のすべてが削除されます。 "ランタイムエラー - 未定義の 'プッシュ'プロパティを読み取ることができません"Ionic - ローカルストレージからオブジェクトを削除する

appsユーザーのシナリオでは、ユーザーが次のエラーメッセージを表示します。好きなテレビ番組をお気に入りのリストに表示し、そこから希望すれば不快にすることができます。

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

答えて

0

あなたはこのようなあなたのデータを使用している:

  • 編集するfavoritesSeries
  • 保存

これは結構ですが、このように同じように動作しremoveFavoriteSeriesあなたの方法として、ストレージへ:

  • 何にfavoritesSeriesを設定DB
  • から(シリーズのあなたの配列である)FavSerieを削除します返される約束によって解決されますstorage.remove

あなたのコードを修正するには、これにremoveFavoriteSeries:これは何

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

は次のとおりです。

  • 編集すべてのシリーズ
  • が含まれていfavoritesSeriesリストは

ストレージに(今変更)favoritesSeriesを保存しますこれは、シリーズのリストを編集する残りのコードと一致しています。

removeFavoriteSeriesメソッドを呼び出して削除するserieを指定すると、そのメソッドは削除されます。

セリエオブジェクトの固定タイプの設定を検討する必要があります。 favoritesSeriesが固定型の配列だった場合、コンパイル時にこのエラーが発生している可能性があります。

編集:

今、あなたはあなたのFavoritesクラスでonRemoveFromFavoritesを編集する必要があります。

代わりの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 

}

+0

これはほとんど働いていました!私が "Unfavorite"を押すと、お気に入りの配列の新しい配列がDBに保存されます。しかし、私はまだブラウザのページを更新する場合は、リスト内のすべてのシリーズを参照してください。 また、私のfavorites.tsファイルは、私のオリジナルの投稿に表示されるように動作しません。系列を削除する方法は赤で、「指定されたパラメータは呼び出し対象のシグネチャと一致しません」と表示されます。なぜ私はFavSerie配列を送信してはいけないのですか? –

+0

'onRemoveFromFavorites'を編集する必要があります。私は答えの中で使用例を加えました。 –

+0

ワンステップに近い! 1つのセリフで「unfavorite」を押すだけでも、私のリストのすべてが削除されます。しかし、シリーズに取り除いたときに新しいセリフを追加するのが少なくとも私の問題は解決されました。私はもはや同じエラーは発生しません。これは私のDBの様子です:https://imgur.com/a/7N1YP –

関連する問題