【发布时间】:2022-07-28 05:44:34
【问题描述】:
我使用npm generate service 创建了一个Angular 服务。这样,创建的服务将是单例的,即该服务可以在整个应用程序中使用。服务基本上是这样的:
@Injectable({
providedIn: 'root'
})
export class SelectRowIdService {
private selectedRowIdState = new Subject<number>();
selectedRowId$ = this.selectedRowIdState.asObservable();
updateSelectedRowId(id: number) {
console.log('updateSelectedRowId(): ' + id);
this.selectedRowIdState.next(id);
}
}
现在考虑一个表:每次单击一行时,我都在执行一个方法onRowClick(),它正在调用updateSelectedRowId()。每次单击一行时,都会使用正确的 id 调用此方法,我对此进行了验证。服务的updateSelectedRowId() 也会被调用。
在另一个组件内部,而不是表格,我正在注入 SelectRowIdService 并订阅 selectedRowId$:
private selectedRowId?: number;
constructor(private selectRowIdService: SelectRowIdService) {}
ngOnInit() {
this.selectRowIdService.selectedRowId$.subscribe((id: number) => {
this.selectedRowId = id;
console.log('DemoComponent: ' + this.selectedRowId);
});
}
现在,此订阅从未执行,我只是不明白为什么。由于我已经验证了服务的updateSelectedRowId() 方法是在单击表格行时被调用的,所以我认为上面提到的订阅会被执行。我只能假设这与我注册服务的方式有关,这就是我在本文开头提到这一点的原因。有人对此有想法吗?
【问题讨论】:
-
您提到,您订阅了另一个组件中的 observable,所以第一个问题,当您单击该行时,其他组件是否呈现?如果是这样,请检查 Angular 中的“ChangeDetection”。
标签: angular observable