我目前正在为我的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();
}
}
答案 0 :(得分:0)
您正在使用以下数据:
favoritesSeries
favoritesSeries
保存为FavSerie
这很好,但您的方法removeFavoriteSeries
的工作方式如下:
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
}