【发布时间】:2019-09-26 14:10:45
【问题描述】:
我正在制作简单的网上商店,使用 BehaviorSubject 和 observable 将电影从“产品组件”通过“购物车服务”发送到“购物车组件”。
它工作正常,但我只发送一部电影,当我按“购买”时,它总是用正在发送的新对象替换旧电影。
我基本上到处都尝试过 ++ 或 += 之类的东西,但它无法编译。
产品-组件:
import { Component, OnInit, Input, HostListener } from '@angular/core';
import { IMovie } from '../interfaces/IMovie';
import { CartService } from '../services/cart.service';
@Component({
selector: 'app-display-movie',
templateUrl: './display-movie.component.html',
styleUrls: ['./display-movie.component.scss']
})
export class DisplayMovieComponent implements OnInit {
@Input() movie: IMovie;
message: string;
constructor(private cartservice: CartService) { }
ngOnInit() {
}
addToCart(movie){
this.cartservice.updateCart(movie);
localStorage.setItem("cart", JSON.stringify(movie));
}
}
HTML
<button (click)="addToCart(movie)" class="btn-add">Buy</button>
服务:
import { Injectable, Output, EventEmitter } from '@angular/core';
import { IMovie } from '../interfaces/IMovie';
import { BehaviorSubject } from 'rxjs';
import { Subject } from 'rxjs';
@Injectable()
export class CartService {
private cartSource = new BehaviorSubject<any[]>([]);
currentShoppingCart = this.cartSource.asObservable();
constructor(){}
updateCart(item: any[]){
this.cartSource.next(item);
}
}
购物车组件
import { Component, OnInit, Input } from '@angular/core';
import { CartService } from '../services/cart.service';
import { IMovie } from '../interfaces/IMovie';
@Component({
selector: 'app-cart',
templateUrl: './cart.component.html',
styleUrls: ['./cart.component.scss']
})
export class CartComponent implements OnInit {
message: string;
item: IMovie[];
constructor(private cartservice: CartService) {}
ngOnInit() {
this.cartservice.currentShoppingCart.subscribe(item => this.item = item)
}
}
我希望购物车将项目堆叠为一个数组,然后在购物车组件视图中显示该数组。
【问题讨论】:
标签: angular service components interaction