我使用以下方法来在添加新记录后刷新Details
页面。更新记录后,我也需要刷新。
EventProxyService
export class EventProxyService {
private eventTracker = new BehaviorSubject<any>();
getEvent(): Observable<any> {
return this.eventTracker.asObservable();
}
setEvent(param: any): void {
this.eventTracker.next(param);
}
}
CreateComponent:
export class CreateComponent implements OnInit {
constructor(private eventProxyService: EventProxyService) { }
create(param: any): void {
//other staff related to creating record
this.eventProxyService.setEvent(param);
}
}
DetailsComponent:
export class DetailsComponent implements OnInit {
subscription;
constructor(private eventProxyService: EventProxyService) { }
ngOnInit() {
this.subscription = this.eventProxyService.getEvent().subscribe((param: any) => {
this.refresh(param);
);
}
refresh(param) {
this.record = param; //update record via new one passed from service
}
ngOnDestroy(): void {
this.subscription.unsubscribe();
}
}
这种方法效果很好,但是我对以下问题感到困惑:
1)因为我也像this.eventProxyService.setEvent(param);
方法一样在update()
方法中调用create()
,所以最好在我的服务级别中调用它组件级别?
2)在上面的CreateComponent
中触发next()方法时有什么问题吗?
答案 0 :(得分:1)
我个人认为您当前的方法完全有效。您可以考虑添加限制规则(如前所述),仅从服务层调用import re
regex = r"^.*?<(\d+)>_<(\d+)>.*$"
test_str = """
SomeText<192>_<283>.value
SomeText<>_<>.value
SomeOtherText_<192>r962<283>xyz
"""
subst = "SomeOtherText_<\\1>r962<\\2>xyz"
print(re.sub(regex, subst, test_str, 0, re.MULTILINE))
。这将提高组件的单一职责。无论如何,我认为这确实取决于项目的规模和寿命。对于开始一个项目,绝对可以像您一样做!
答案 1 :(得分:1)
我认为您使用 BehaviourSubject
的设计就可以了(至少在我看来是这样)。
我可以建议的一件事是在根范围单例服务中使用 BehaviourSubject
。 (在您的情况下我不会注意到)
如果我在服务的create()方法中调用setEvent()怎么办(不是该proxyService,我的意思是我保留CRUD的其他服务) 方法)
如果我正确理解了您的问题,答案为否。
由于不建议从另一个服务中调用服务方法,因此请保持简单。在现实世界的项目中,一旦执行CRUD方法,我们将尝试借助Service方法从Component本身刷新数据(但不在服务中。)
我在CRUD方法中通过setEvent()方法调用next(),在创建,更新,删除操作完成之后。好不好 这种方法,在现实世界中的示例中有更好的方法呼唤 我在第一个问题中问到的服务(CRUD)中的next()
是的,这是一个好方法。