Я читал о том, как обмениваться данными между несвязанными компонентами в Angular из раздела «Несвязанные компоненты: обмен данными со службой» учебного пособия здесь .
Я вижу, как этот пример работает для строки, которую они пытаются разделить между своими компонентами, но мой тип данных немного сложнее:
А именно, я думаю, что мой BehaviorSubject должен выглядеть следующим образом:
private currentPopulationSource: BehaviorSubject<Population> = new BehaviorSubject<Population>(new Population(new Array<Organism>()));
Моя популяционная модель - это просто контейнер для массива Организмов:
import { Organism } from './organism.model';
export class Population {
private individuals: any;
constructor(individuals: Organism[]){
this.individuals = individuals;
}
getIndividuals(){
return this.individuals;
}
}
У меня есть экземпляр Организма, назовем его «организм1».
Я хотел бы добавить его в массив индивидуумов, обернутый в модели Population, и я бы хотел, чтобы несколько несвязанных компонентов подписались на BehaviorSubject для населения (в настоящее время у меня есть private currentPopulation = this.currentPopulationSource.asObservable();
в моем PopulationManagerService сразу после моего объявления currentPopulationSource, какЯ видел в уроке).
Мне неясно, какой будет синтаксис для добавления организма1 к моему currentPopulationSource (.next()
здесь не имеет смысла).
Возможно, BehaviorSubjectне самый подходящий выбор, чтобы сделать здесь, если я хочу, чтобы постоянно растущий массив создавался?Если есть лучший вариант (ReplaySubject?), Я не совсем знаю, как его реализовать.
Моя служба управления населением:
import { Injectable } from '@angular/core';
import { Organism } from './organism.model';
import { Population } from './population.model';
import { BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class PopulationManagerService {
private currentPopulationSource: BehaviorSubject<Population> = new BehaviorSubject<Population>(new Population(new Array<Organism>()));
currentPopulation = this.currentPopulationSource.asObservable();
constructor() { }
addOrganismToPopulation(organism: Organism){
this.currentPopulationSource.next(new Population(new Array<Organism>(organism))); //This does not work
// this.currentPopulation.getIndividuals().push(organism); //This did not work either, because currentPopulation is of type Observable<Population> rather than of type Population
}
}
В моем компоненте:
let testIndividual: Organism = this.individualGenService.makeIndividual("green", "blue");
this.popManager.addOrganismToPopulation(testIndividual);
this.popManager.currentPopulation.subscribe(results =>{
console.log(results.getIndividuals()); //returns undefined
});
В настоящее время возвращается неопределенное значение.
Очень благодарен за любую помощь по этому вопросу.