Angular 使用behaviorsubject调用组件的方法

Angular 使用behaviorsubject调用组件的方法,angular,Angular,我在Angular 8中有两个不相关的组件,并试图从一个组件调用另一个组件方法。我正在尝试使用Behavior Subject,但不确定它是否是属性实现的。我需要从agreementcomponent调用getAgreementHistory方法。我目前已尝试在accept方法中调用。我已在服务中声明了行为主体。 谁能告诉我问题是什么 被调用的方法组件 export class MyAgreementsComponent implements OnInit { agreementsHisto

我在Angular 8中有两个不相关的组件,并试图从一个组件调用另一个组件方法。我正在尝试使用Behavior Subject,但不确定它是否是属性实现的。我需要从agreementcomponent调用getAgreementHistory方法。我目前已尝试在accept方法中调用。我已在服务中声明了行为主体。 谁能告诉我问题是什么

被调用的方法组件

export class MyAgreementsComponent implements OnInit {
  agreementsHistoryData: AgreementHistoryModel[];
  agreementsHistory: AgreementHistoryModel[];
  loading: boolean;
  myData: any;
  showAgreementReadOnly: boolean;
  public modal: any;

  constructor( public agreementsService: AgreementsService,
               public router: Router,
               private route: ActivatedRoute,
               public modalService: NgbModal) {
                this.agreementsService.agreementHistoryLoaded$.subscribe(x => x);
               }

  ngOnInit() {
    this.getAgreementsHistory();
  }

  public getAgreementsHistory() {
    this.loading = true;
    this.agreementsService
      .getAgreementsHistory()
      .subscribe((data: AgreementHistoryModel[]) => {
        if (data) {
          this.loading = false;
          this.agreementsHistoryData = data;
          this.getNonCompletedAgreements();
        }
      });
    }
}
export class AgreementComponent implements OnInit {
  @ViewChild('scroll', { read: ElementRef, static: false })


  @Output() closeModal = new EventEmitter<boolean>();

  myData: any;
  agreementData: any;


  public scroll: ElementRef<any>;
  public loading = false;
  showAgreementReadOnly: boolean;

  constructor(public agreementsService: AgreementsService,
              public msalService: MsalService,
              public modalService: NgbModal) {


    this.isDisabled = false;
    this.todaysDate = this.GetUtcDate(new Date()).toISOString();
    this.todayDateUtc = this.todaysDate.substring(
      0,
      this.todaysDate.length - 1
    );

 }

  GetUtcDate(date: Date) {
    const now_utc = Date.UTC(
      date.getUTCFullYear(),
      date.getUTCMonth(),
      date.getUTCDate(),
      date.getUTCHours(),
      date.getUTCMinutes(),
      date.getUTCSeconds()
    );

    return new Date(now_utc);
  }

  ngOnInit() {
    this.getAgreement();
  }

  public getAgreement() {
    this.loading = true;

    this.agreementsService
        .getAgreement(this.agreementsService.agreementUserId)
        .subscribe((agreementModel: AgreementModel) => {
          if (agreementModel) {
            this.myData = agreementModel;
            this.agreementData = agreementModel.data;
            this.SetWarningMessage();
            this.loading = false;
           }
        });
    }

  public CloseModal() {
        this.modalService.dismissAll();
  }

  accept() {
    this.update(Accepted);
    this.CloseModal();
    this.agreementsService.agreementHistoryLoaded$.next(true);
  }
}
调用组件

export class MyAgreementsComponent implements OnInit {
  agreementsHistoryData: AgreementHistoryModel[];
  agreementsHistory: AgreementHistoryModel[];
  loading: boolean;
  myData: any;
  showAgreementReadOnly: boolean;
  public modal: any;

  constructor( public agreementsService: AgreementsService,
               public router: Router,
               private route: ActivatedRoute,
               public modalService: NgbModal) {
                this.agreementsService.agreementHistoryLoaded$.subscribe(x => x);
               }

  ngOnInit() {
    this.getAgreementsHistory();
  }

  public getAgreementsHistory() {
    this.loading = true;
    this.agreementsService
      .getAgreementsHistory()
      .subscribe((data: AgreementHistoryModel[]) => {
        if (data) {
          this.loading = false;
          this.agreementsHistoryData = data;
          this.getNonCompletedAgreements();
        }
      });
    }
}
export class AgreementComponent implements OnInit {
  @ViewChild('scroll', { read: ElementRef, static: false })


  @Output() closeModal = new EventEmitter<boolean>();

  myData: any;
  agreementData: any;


  public scroll: ElementRef<any>;
  public loading = false;
  showAgreementReadOnly: boolean;

  constructor(public agreementsService: AgreementsService,
              public msalService: MsalService,
              public modalService: NgbModal) {


    this.isDisabled = false;
    this.todaysDate = this.GetUtcDate(new Date()).toISOString();
    this.todayDateUtc = this.todaysDate.substring(
      0,
      this.todaysDate.length - 1
    );

 }

  GetUtcDate(date: Date) {
    const now_utc = Date.UTC(
      date.getUTCFullYear(),
      date.getUTCMonth(),
      date.getUTCDate(),
      date.getUTCHours(),
      date.getUTCMinutes(),
      date.getUTCSeconds()
    );

    return new Date(now_utc);
  }

  ngOnInit() {
    this.getAgreement();
  }

  public getAgreement() {
    this.loading = true;

    this.agreementsService
        .getAgreement(this.agreementsService.agreementUserId)
        .subscribe((agreementModel: AgreementModel) => {
          if (agreementModel) {
            this.myData = agreementModel;
            this.agreementData = agreementModel.data;
            this.SetWarningMessage();
            this.loading = false;
           }
        });
    }

  public CloseModal() {
        this.modalService.dismissAll();
  }

  accept() {
    this.update(Accepted);
    this.CloseModal();
    this.agreementsService.agreementHistoryLoaded$.next(true);
  }
}
导出类AgreementComponent实现OnInit{
@ViewChild('scroll',{read:ElementRef,static:false})
@Output()closeModal=neweventemitter();
我的数据:任何;
协议数据:任何;
公共卷轴:ElementRef;
公共加载=错误;
showAgreementReadOnly:布尔值;
建造商(公共协议服务:协议服务,
公共msalService:msalService,
公共modalService:NgbModal){
this.isDisabled=false;
this.todaysDate=this.GetUtcDate(new Date()).toISOString();
this.todayDateUtc=this.todaydate.substring(
0,
此.todaysDate.length-1
);
}
GetUtcDate(日期:date){
const now_utc=Date.utc(
date.getUTCFullYear(),
date.getUTCMonth(),
date.getUTCDate(),
date.getUTCHours(),
date.getUTCMinutes(),
date.getUTCSeconds()
);
返回新日期(现在为utc);
}
恩戈尼尼特(){
这个.getAgreement();
}
公共协议{
这是。加载=真;
本协议服务
.getAgreement(此.agreementsService.agreementUserId)
.订阅((agreementModel:agreementModel)=>{
if(协议模型){
this.myData=agreementModel;
this.agreementData=agreementModel.data;
这是.SetWarningMessage();
这一点:加载=错误;
}
});
}
公共关系(英文){
this.modalService.dismissAll();
}
接受{
更新(已接受);
这个.CloseModal();
this.agreementsService.agreementHistoryLoaded$.next(true);
}
}
服务

@Injectable()
export class AgreementsService {
  private baseUrl: string;
  public data:  AgreementModel[];
  public agreementData:  AgreementModel;
  public agreementHistoryLoaded$: BehaviorSubject<boolean>;

  constructor(private http: HttpClient, private appService: AppConfigService) {
    this.baseUrl = this.appService.getAppSettings().apiServer.agreements;
    this.agreementHistoryLoaded$ = new BehaviorSubject(false);
  }

public agreementUserId: number;


  public getAgreementsHistory(): Observable<AgreementHistoryModel[]> {
    this.agreementHistoryLoaded$.next(true);
    return this.http.get<AgreementHistoryModel[]>(`${this.baseUrl}agreements-history`);
  }


}
@Injectable()
出口类协议服务{
私有baseUrl:string;
公共数据:协议模型[];
公共协议数据:协议模型;
公共协议历史加载$:行为主体;
构造函数(专用http:HttpClient,专用appService:AppConfigService){
this.baseUrl=this.appService.getAppSettings().apiServer.agreements;
this.agreementHistoryLoaded$=新行为主体(false);
}
public agreementUserId:number;
public getAgreementsHistory():可观察{
this.agreementHistoryLoaded$.next(true);
返回this.http.get(`this.baseUrl}协议历史记录`);
}
}

在AgreementComponent中,您没有调用Accept方法吗?是,它已在AgreementComponent中调用。从html按钮单击触发。我需要调用getAgreementHistory方法,你怎么知道它不起作用?this.agreementsService.agreementHistoryLoaded$.subscribe(x=>x);不会做的我做什么亚历山大。缺少什么?我根据您的代码创建了这个小型stackblitz,Behavior Subject在AgreementComponent中工作您没有调用Accept方法?是的,它在AgreementComponent中被调用。从html按钮单击触发。我需要调用getAgreementHistory方法,你怎么知道它不起作用?this.agreementsService.agreementHistoryLoaded$.subscribe(x=>x);不会做的我做什么亚历山大。缺少什么?我根据你的代码创建了这个小型stackblitz,这个主题很有效