使用 subject 在组件之间共享数据时获取未定义
Get undefined when using subject to share data between components
我正在尝试将数据从一个组件发送到另一个组件,但它总是给我 undefined !
这是我的 services.ts :
import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class DataService {
constructor() { }
private subjectDossierNumber = new Subject<any>();
sendDossierNumber( dossierNumber : string){
this.subjectDossierNumber.next(dossierNumber);
}
getDossierNumber() : Observable<any>{
return this.subjectDossierNumber.asObservable();
}
}
这是发送数据的组件:
dossierNumber:string;
constructor(private dataService : DataService){}
ngOnInit(){
this.dossierNumber="2145"}
createNewRequest() { this.dataService.sendDossierNumber(this.dossierNumber); }
这是接收数据的组件:
dossierNumber : string;
constructor(private dataService : DataService){}
ngOnInit() {
this.dataService.getDossierNumber().subscribe(data => {this.dossierNumber = data;})
}
在 sendDossierNumber() 方法中运行良好,但在 getDossierNumber() 方法中数据始终未定义。谁能知道问题出在哪里?
尝试使用private subjectDossierNumber = new BehaviorSubject<string>('')
。如果您希望主题包含多个值,请考虑 ReplaySubject
。
我的第一个猜测是您使用的是 Subject
,而不是 BehaviorSubject
。主要区别在于 Subject
不是 return 开始订阅时的初始值,而是 BehaviorSubject
是。
有主题
- 如果您开始订阅,然后发送新消息,将会收到该消息。
- 如果您发送一条消息,然后开始订阅,您将无法获得
Subject
的当前状态(值)。
有行为对象
- 如果您开始订阅,然后发送新消息,将会收到该消息。
- 如果您发送一条消息,然后开始订阅,您将获得
BehaviorSubject
的当前状态(值)。
这里有一些有用的问题供进一步阅读:
我正在尝试将数据从一个组件发送到另一个组件,但它总是给我 undefined !
这是我的 services.ts :
import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class DataService {
constructor() { }
private subjectDossierNumber = new Subject<any>();
sendDossierNumber( dossierNumber : string){
this.subjectDossierNumber.next(dossierNumber);
}
getDossierNumber() : Observable<any>{
return this.subjectDossierNumber.asObservable();
}
}
这是发送数据的组件:
dossierNumber:string;
constructor(private dataService : DataService){}
ngOnInit(){
this.dossierNumber="2145"}
createNewRequest() { this.dataService.sendDossierNumber(this.dossierNumber); }
这是接收数据的组件:
dossierNumber : string;
constructor(private dataService : DataService){}
ngOnInit() {
this.dataService.getDossierNumber().subscribe(data => {this.dossierNumber = data;})
}
在 sendDossierNumber() 方法中运行良好,但在 getDossierNumber() 方法中数据始终未定义。谁能知道问题出在哪里?
尝试使用private subjectDossierNumber = new BehaviorSubject<string>('')
。如果您希望主题包含多个值,请考虑 ReplaySubject
。
我的第一个猜测是您使用的是 Subject
,而不是 BehaviorSubject
。主要区别在于 Subject
不是 return 开始订阅时的初始值,而是 BehaviorSubject
是。
有主题
- 如果您开始订阅,然后发送新消息,将会收到该消息。
- 如果您发送一条消息,然后开始订阅,您将无法获得
Subject
的当前状态(值)。
有行为对象
- 如果您开始订阅,然后发送新消息,将会收到该消息。
- 如果您发送一条消息,然后开始订阅,您将获得
BehaviorSubject
的当前状态(值)。
这里有一些有用的问题供进一步阅读: