Я создаю простой Angular-интернет-магазин и отправляю данные между двумя компонентами через сервис, используя Subject и Observable.
Почему-то в моем CartComponent "элементы" не определены, почему?
Я не могу обернуть голову вокруг, я что-то упускаю из жизни?
Услуги
import { Injectable } from '@angular/core';
import { ICartItem } from '../interfaces/ICartItem';
import { Subject } from 'rxjs';
import { IMovie } from '../interfaces/IMovie';
@Injectable({
providedIn: 'root'
})
export class CartService {
private cartSource = new Subject<ICartItem[]>();
private cart: ICartItem[] = [];
currentShoppingCart = this.cartSource.asObservable();
constructor() {}
addMovie(movie: IMovie) {
let foundMovie = false;
for (let i = 0; i < this.cart.length; i++) {
if (movie.id === this.cart[i].movie.id) {
this.cart[i].amount++;
foundMovie = true;
}
}
if (!foundMovie) {
this.cart.push({movie, amount: 1});
}
this.cartSource.next(this.cart);
}
removeMovie(movie: IMovie) {
for (let i = 0; i < this.cart.length; i++) {
if (movie.id === this.cart[i].movie.id) {
this.cart[i].amount--;
} if (this.cart[i].amount < 1) {
this.cart.splice(i, 1);
}
}
this.cartSource.next(this.cart);
}
}
Компонент
import { Component, OnInit } from '@angular/core';
import { CartService } from '../services/cart.service';
import { ICartItem } from '../interfaces/ICartItem';
@Component({
selector: 'app-cart',
templateUrl: './cart.component.html',
styleUrls: ['./cart.component.scss']
})
export class CartComponent implements OnInit {
items: ICartItem[];
ngOnInit() {
}
decreaseAmount(movie) {
this.cartservice.removeMovie(movie);
}
increaseAmount(movie) {
this.cartservice.addMovie(movie);
}
constructor(private cartservice: CartService) {
this.cartservice.currentShoppingCart.subscribe( cart => {
this.items = cart;
console.log(this.items);
});
//This one will be undefined
console.log(this.items);
}
}
Я ожидаю, что элементы будут содержать массив movie, но теперь console.log (this.items); даст мне "неопределенный".