访问的每个对象都返回一个新对象

时间:2017-10-03 00:56:41

标签: angular ionic2

我正在开发一个电子商务应用,而且我很难创建一个单独的对象,我可以将其用作我的应用的购物车。

首先,我创建了一个服务:

import {Injectable} from '@angular/core';
import {Item} from '../models/item';

@Injectable()
export class CartService {

    private items: Item[];

    constructor() {
      this.items = [];
    }

    public addToCart(item: Item): string {
       ...
    }

    public getItems(): Item[] {
      return this.items;
    }
}

然后在我的app.module.ts:

import { CartService } from '../services/cart.service';

@NgModule({
  declarations: [
     MyApp,
     ...
  ],
  imports: [
     ...
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    ...
  ],
  providers: [
    ...
    CartService
  ]
})
export class AppModule {}

现在我想将cartService.getItems作为单项数组,所以我这样做:

 @IonicPage({
   name: 'destaques-page'
 })
 @Component({
   selector: 'page-destaques',
   templateUrl: 'destaques.html'
 })
 export class DestaquesPage {
     ...

     constructor(public navCtrl: NavController, db: AngularFireDatabase, private cart: CartService) {
         ...

         console.log(this.cart.getItems.length);
     }
     ...
  }

在我希望访问该对象的每个页面中,但在每个页面中我都会得到一个全新的对象,这意味着我无法获得已经添加的所有不同内容。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

您需要确保在重定向时未完全加载页面。好像页面再次加载,服务从内存中被销毁,项目再次初始化为[]。

理想情况下,您应该使用localStorage和您的服务

import {Injectable} from '@angular/core';
import {Item} from '../models/item';

@Injectable()
export class CartService {

private items: Item[];

constructor() {
  try {
    this.items = JSON.parse(localStorage.get("mycart")) as Item[];
  } catch(err) {
    this.items = [];
  }
}

public addToCart(item: Item): string {
   this.items.push(item);
   localStorage.setItem("mycart", JSON.stringify(this.items));
}

public getItems(): Item[] {
  return this.items;
}
}

我希望这会有助于事业