我无法访问组件 2 中 rxjs 的主题在组件 1 中设置的条件

I am unable to access condition set up in component-1 by Subject of rxjs in component-2

服务:

import { Injectable } from "@angular/core";
import { Subject } from "rxjs";

@Injectable({
  providedIn: "root"
})
export class AdminRoleLocalService {
    public newRoleAdded = new Subject<boolean>();
    constructor() {}
       newRoleAddedEvent() {
       this.newRoleAdded.next(true);
    }
}

组件 1:

submitAddRoleForm(addRoleForm: AddRoleData) {
    this.isFetching = true;
    this.roleService.addRoleData(addRoleForm).subscribe(
    httpResponse => {
       console.log(httpResponse);
       this.isFetching = false;
       this.roleLocalService.newRoleAddedEvent();
       this.router.navigate(["/role-management"]);
    },
    errorMessage => {
     console.log(errorMessage);
     this.errorMessageContent(errorMessage);
    }
   );
}

组件 2:

ngOnInit() {
   this.roleLocalService.newRoleAdded.subscribe(flag => {
      this.newRoleAddedFlag = flag;
   });
}

i am seeing newRoleAddedFlag as undefined where as i am expecting value as True. I am unable to find out where i am seeing. Request you to help me out.

试试

public newRoleAdded = new BehaviorSubject<boolean>(true);

BehaviorSubject 是一个类似于 Subject 的可观察对象。但是你用一个值启动你的可观察对象,当你订阅它时,你会得到最后一个值。

您可以尝试使用

public newRoleAdded = new ReplaySubject<boolean>(1);

在这种情况下,您无需设置初始值,第二个组件将等待 next 方法调用。或者你可以使用

public newRoleAdded = new BehaviorSubject<boolean>(null);

并通过方法访问:

getNewRoleAddedObservable(): Observable<boolean> {
  return this.newRoleAdded.pipe(filter(value => value !=null)).asObservable();
}

永远不要暴露主题public这是不好的做法。