Я довольно новичок в Angular, и у меня возникают проблемы при передаче массива в другой (не связанный с родителем / дочерним) компонент по другому маршруту . В моем приложении нужно нажать кнопку, чтобы пометить бронирование как «принятое», и отобразить тот же массив принятых заказов в другом представлении (изменение маршрута).
Я пробовал реализует BehaviorSubject, но он не работает. Я могу установить массив успешно, но когда я хочу получить его, подписавшись на него во 2-м компоненте, он показывает только начальное значение субъекта, которое в данном случае - «Hello World». Пожалуйста, помогите мне, я пробовал это в течение недели, смотрел видео на YouTube и гуглил, но я не могу найти, что не так. PD: я не добавил sharedService в качестве провайдера в app.component.ts, если кому-то было интересно.
First component
import { Component, OnInit } from '@angular/core';
import {SharedService} from '../../services/shared.service';
import {share} from 'rxjs/operators';
@Component({
selector: 'app-turnos',
templateUrl: './turnos.component.html',
styleUrls: ['./turnos.component.css'],
providers:[TurnoService]
})
export class TurnosComponent implements OnInit {
public turnos: Turno;
public status;
constructor(
private _sharedService: SharedService
) { }
acceptBooking(booking){
this._sharedService.addToAccepted(booking);
this._sharedService.acceptedBookingsSubject.pipe(share()).subscribe(res=>console.log(res));
//this is just to watch the response, which shows the correct array, but it works only in this component
}
}
Теперь общая служба
import {Injectable} from '@angular/core';
import {BehaviorSubject} from 'rxjs';
import {Turno} from '../models/turno';
import {Observable} from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class SharedService{
private acceptedBookings=[];
public acceptedBookingsSubject= new BehaviorSubject<any[]>(['Hello World']);
constructor(){
}
addToAccepted(turno : Turno){
this.acceptedBookings.push(turno);
this.acceptedBookingsSubject.next(this.acceptedBookings);
}
}
И, наконец, 2-й компонент, который должен показать все принятые заказы. Я использовал как pipe (share ()), используя asyn c pipe, так и subscribe (), чтобы увидеть, сработал ли какой-либо, но оба просто показывают «Hello World», когда я вызываю console.log.
import { Component, OnInit} from '@angular/core';
import {SharedService} from '../../services/shared.service';
import {Observable} from 'rxjs';
import {Turno} from '../../models/turno';
import {share} from 'rxjs/operators';
@Component({
selector: 'app-turnoaceptado',
templateUrl: './turnoaceptado.component.html',
styleUrls: ['./turnoaceptado.component.css'],
providers:[SharedService]
})
export class TurnoaceptadoComponent implements OnInit {
public acceptedBookings;
public array:Observable<any[]>;
public test;
ngOnInit(): void {
this.array = this._sharedService.acceptedBookingsSubject.asObservable();
this.array.subscribe(response=>this.acceptedBookings=response);
this.test=this.array.pipe(share());
console.log(this.test);
console.log(this.acceptedBookings);
}
constructor(private _sharedService: SharedService) { }
}