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