angularfire2和ionic2。添加或删除对象时,映射数据将重新呈现整个列表

angularfire2和ionic2。添加或删除对象时,映射数据将重新呈现整个列表,angular,firebase-realtime-database,angularfire,ionic2,angularfire2,Angular,Firebase Realtime Database,Angularfire,Ionic2,Angularfire2,我有一个关于使用angularfire2从firebase获取数据的问题。 我的数据库体系结构如下所示: { "productsfavorites" : { "-KNnfAs31LkMUjU60VAG" : true }, "short_desc" : { "-KNnfAs31LkMUjU60VAG" : { "city" : "Frontignan Plage", "desc" : "Superbe maison les pieds da

我有一个关于使用angularfire2从firebase获取数据的问题。 我的数据库体系结构如下所示:

{
    "productsfavorites" : {
    "-KNnfAs31LkMUjU60VAG" : true
  },
  "short_desc" : {
    "-KNnfAs31LkMUjU60VAG" : {
      "city" : "Frontignan Plage",
      "desc" : "Superbe maison les pieds dans l'eau",
      "favorite" : true,
      "orientation" : "portrait",
      "price" : 335000,
      "ratio" : 2161,
      "ratiok" : 22,
      "size" : 155,
      "src" : "http://decor.friesiannews.com/wp-content/uploads/2014/08/Modern-Beach-Themed-Bedrooms.jpg",
      "type" : "Maison"
    },
    "-KNngYcNoUUql4oIMxwU" : {
      "city" : "Frontignan",
      "desc" : "A nice home in Frontignan",
      "orientation" : "portrait",
      "price" : 255000,
      "ratio" : 2125,
      "ratiok" : 21,
      "size" : 120,
      "src" : "http://homeimprov.etienneathens.com/wp-content/uploads/2014/08/The-Beach-Ornament.jpg",
      "type" : "Maison"
    },
  }
}
在我的ts文件中,我有以下内容:

import {Page, Content} from 'ionic-angular';
import {AngularFire, FirebaseListObservable} from "angularfire2";
import { Observable } from 'rxjs';
import 'rxjs/add/operator/map';
@Page({
    templateUrl: "build/pages/page1/page1.html",
})
export class Page1 {
products: Observable<any[]>;//contains the ref for the goods in a given city 
constructor(private af: AngularFire) {
this.getShortDescFav();
}

//To list the favorites products I use this function:
getShortDescFav() {
    this.products = this.af.database.list('/productsfavorites/')
        .map((items) => {
            return items.map(item => {
            item.short_desc = this.af.database.object('/short_desc/' + item.$key)
                return item;
            });
        });
}

}
import{Page,Content}来自“离子角”;
从“angularfire2”导入{AngularFire,FirebaseListObservable};
从“rxjs”导入{Observable};
导入'rxjs/add/operator/map';
@页面({
templateUrl:“build/pages/page1/page1.html”,
})
导出类第1页{
products:Observable;//包含给定城市中商品的参考号
建造师(私人af:AngularFire){
这个.getShortDescFav();
}
//要列出收藏夹产品,我使用此功能:
getShortDescFav(){
this.products=this.af.database.list(“/productsfavorites/”)
.map((项目)=>{
返回items.map(item=>{
item.short_desc=this.af.database.object('/short_desc/'+item.$key)
退货项目;
});
});
}
}
然后在html文件中我这样做

<ion-card *ngFor="let item of products | async">
      <img src="{{(item.short_desc | async)?.src}}" class="lazy" alt="Image" id="{{item.$key}}" (load)="imageLoaded(item.$key)">
  <ion-card-content>
    <ion-card-title>
      <ion-row>
      <ion-col width-67 no-padding>
    {{(item.short_desc | async)?.city}}
  </ion-col>
  <ion-col width-33 text-right no-padding>
    <span primary>
{{(item.short_desc | async)?.price}}€
</span>
</ion-col>
</ion-row>
      </ion-card-title>
      <ion-row>
        <ion-col width-33 no-padding>
          {{(item.short_desc | async)?.type}}
        </ion-col>
        <ion-col width-33 no-padding text-center>
          {{(item.short_desc | async)?.size}}m2
        </ion-col>
        <ion-col width-33 no-padding text-right>
          {{(item.short_desc | async)?.ratiok}}K€/m2
        </ion-col>
      </ion-row>
    <p>
      {{(item.short_desc | async)?.desc}}
    </p>
  <ion-row>
    <ion-col width-25 text-center>
      <ion-icon name="md-eye"center></ion-icon>
    </ion-col>
    <ion-col width-25 text-center>
      <ion-icon name="md-share"></ion-icon>
    </ion-col>
    <ion-col width-25 text-center>
      <ion-icon name="md-create"></ion-icon>
    </ion-col>
    <ion-col width-25 text-center>
      <ion-icon *ngIf="(item.short_desc | async)?.favorite != true" name="md-star" (click)="favorite(item.$key)" class="regular-product"></ion-icon>
      <ion-icon *ngIf="(item.short_desc | async)?.favorite == true" name="md-star" (click)="regular(item.$key)" class="favorite-product"></ion-icon>
    </ion-col>
  </ion-row>
  </ion-card-content>
</ion-card>

{{(item.short_desc|async)?.city}
{{(item.short|u desc | async)?.price}
{{(item.short_desc | async)?.type}
{{(item.short_desc | async)?.size}m2
{{(item.short_desc | async)?.ratiok}K欧元/m2

{{(item.short_desc|async)?.desc}

将显示产品标记为收藏夹,但一旦新产品成为收藏夹,列表将重新呈现。 如何防止列表被重新呈现,并且只为新产品添加一张卡片作为收藏夹

希望有人能在这方面帮助我

亚历克斯。

取而代之的是这个

item.short_desc = this.af.database.object('/short_desc/' + item.$key)
            return item;
        });
这样做

return this.af.database.object('/short_desc/' + item.$key);
同样在html中,您将获得item而不是item.short\u desc