我的全球服务人员会推动behaviourSubject变量
dataWorkFlowService :
export class CallWorkflowService {
url = 'http://localhost:3000/';
selectedNode : BehaviorSubject<Node> = new BehaviorSubject(new Node(''))
dataflow : BehaviorSubject<any> = new BehaviorSubject<any>({});
constructor(private http: HttpClient) {}
getDataflow() {
return this.http.get(this.url);
}
updateNode(node :Node) {
this.selectedNode.next(node);
}
}
在我的组件 ReteComponent 中,我使用
设置了behaviourSubject值 this.dataFlowService.selectedNode.next(node);
我是我的第二个组件,我订阅了BehaviourSubject
export class ComponentsMenuComponent implements OnInit {
constructor(private callWorkflowService:CallWorkflowService) { }
selectedNode:Node = new Node('');
dataFlow:any;
nxtElements:String[]=[]
ngOnInit() {
this.callWorkflowService.dataflow.subscribe(data=> {
this.dataFlow=data
})
this.callWorkflowService.selectedNode.subscribe( (node) => {
this.selectedNode=node; <=== ###### Subscription is not triggered
if(this.dataFlow) {
this.nxtElements=this.dataFlow[node.name].next;
}
})
}
当我向selectedNode
触发新值时,我的订阅不起作用
但是在另一个组件中,它运行良好
export class AppComponent {
opened:boolean=false;
events: string[] = [];
constructor(private callWorkflowService:CallWorkflowService) { }
ngOnInit() {
this.callWorkflowService.selectedNode.pipe(
skip(1)
)
.subscribe( (node) => {
this.opened=true; <== subscription is working
})
}
}
当我将其更改为
时,我注意到在 ComponentsMenuComponent 中export class ComponentsMenuComponent implements OnInit {
constructor(private callWorkflowService:CallWorkflowService) { }
selectedNode:Node = new Node('');
dataFlow:any;
nxtElements:String[]=[]
ngOnInit() {
this.callWorkflowService.getDataflow().subscribe(data=> {
this.dataFlow=data;
}) ####CHANGE HERE ### <== using `getDataFlow` method which is not observable
this.callWorkflowService.selectedNode.subscribe( (node) => {
this.selectedNode=node; ### <=== subscription is triggered
if(this.dataFlow) {
this.nxtElements=this.dataFlow[node.name].next;
}
})
}
selectNode订阅正在工作。
更新 我试图改变我的前进方式
在我的服务中,我添加了一个返回最后一个值的方法
updateDataFlow() {
return this.dataflow.getValue();
}
在 ComponentsMenuComponent
中this.callWorkflowService.node.subscribe( (node) => {
this.dataFlow = this.callWorkflowService.updateDataFlow();
this.selectedNode=node;
if(this.dataFlow) {
this.nxtElements=this.dataFlow[node.name].next;
}
})
再次在此订阅无法正常工作。
我试图对这一行发表评论
this.dataFlow = this.callWorkflowService.updateDataFlow();
在这里惊喜..订阅有效。
当我取消对我提到的行的注释时,我不知道为什么它不订阅
答案 0 :(得分:0)
您必须错误地提供了CallWorkflowService,并且在不同的组件中获得了该服务的另一个实例。如果一个组件正常工作,而另一个组件却不工作,那么我猜他们不是都订阅了相同的行为主题。
您如何提供服务?是在模块,组件中提供的,还是在其中使用的?