Angular,DragnDrop问题,本地存储

问题描述

功能:Feature [] = [];

使用此代码,我可以将该数组项拖放并保存到存储中

drop(event: CdkDragDrop<string[]>) {
  moveItemInArray(this.features,event.prevIoUsIndex,event.currentIndex);
  window.localStorage.setItem('features',JSON.stringify(this.features));
}
@H_502_6@

有了这个,我订阅了数据,一切正常... 在这种情况下,一切都很好,即使我再添加新项目

  ngOnInit() {
  this.isLoading = true;
  this.featuresService.getFeatures();
  this.featuresSub = this.featuresService.getFeatureUpdateListener()
  .subscribe((featureData: {features: Feature[]}) => {
   this.features = featureData.features
   this.isLoading = false;
@H_502_6@

但是如果我替换此行,则此this.features = featuresData.features 我只会看到保存的本地存储数据

   let retrievedData = localStorage.getItem("features") || '{}';
   let newFeaturesArr = JSON.parse(retrievedData);
   this.features = newFeaturesArr

  })
  .....
@H_502_6@

是否知道如何混合这两种逻辑:如果我刷新页面会看到本地存储排序的项目,如果我添加新项目会显示+,则立即在最后显示

解决方法

我认为您的问题可能还不那么清楚,但是根据您所说的,您既可以将localStorage数据也可以将newFeatures创建为对象并将它们合并:


this.features = Object.assign(retrievedData,newFeatures);

或将它们都创建为数组并合并它们:


this.features = retrievedData.concat(newFeatures)