【发布时间】:2019-08-29 17:54:59
【问题描述】:
我想将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;
}
但是,我在服务获取更新值时遇到了同样的问题,第三个组件可以获取这个更新的值,但我的服务打算用于的组件获取默认值。
【问题讨论】:
-
你能拼凑出一个stackblitz显示错误的功能吗?
标签: angular typescript behaviorsubject