Я хочу использовать переменную brandName
от одного и того же компонента к другому в том же модуле. Я пытался сделать это, используя BehaviorSubject
Однако, несмотря на то, что я могу отправить обновленное brandName
в мой сервис, мой компонент по-прежнему использует сообщение по умолчанию.
мой файл службы выглядит так:
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable()
export class DataService {
private messageSource = new BehaviorSubject('default message');
currentMessage = this.messageSource.asObservable();
constructor() { }
changeMessage(message: string) {
console.log('service sent: ' + message);
this.messageSource.next(message);
}
}
здесь консоль выводит обновленное сообщение.
однако, когда я пытаюсь обновить свою переменную в компоненте Order, я получаю «сообщение по умолчанию»
Order.component.ts:
import {DataService} from '../services/data.service';
...
export class OrderComponent implements OnInit {
...
constructor(...private data: DataService)
...
this.data.currentMessage.subscribe(message => this.brandName = message);
console.log('brandname');
console.log(this.brandName);
распечатывает «сообщение по умолчанию»
только их общий родитель app.module.ts
содержит DataService
провайдера.
Редактировать
Я также пытался получить переменную из третьего компонента, используя:
this.data.currentMessage.subscribe (message => this.brandName = message);
В этом случае вы получите обновленное название бренда, но все равно ничего в компоненте, для которого он предназначен, даже несмотря на то, что оба компонента являются братьями и сестрами одного уровня.
Кроме того, я попытался переделать службу, используя
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class DataService {
private data: string;
setOption(value) {
this.data = value;
console.log('service sent: ' + value + 'and data ' + this.data );
}
getOption() {
console.log('service returned');
console.log(this.data);
return this.data;
}
Однако у меня точно такая же проблема с сервисом, получающим обновленное значение, третий компонент может получить это обновленное значение, но мой компонент, для которого была предназначена служба, получает значение по умолчанию.