gpt4 book ai didi

angular - 延迟加载 : Observable not subscribed

转载 作者:太空狗 更新时间:2023-10-29 17:49:45 25 4
gpt4 key购买 nike

在我的 Angular 应用程序中,我有一个父组件:

console.component.html

<div class="main">
<ibe-snackbar></ibe-snackbar>
<router-outlet></router-outlet>
</div>

routler-outlet 可以加载两个子组件。一个是急切加载,另一个是延迟加载。这是路由文件

console.component.routes

const ConsoleRoutes: Routes = [
{ path: 'console', component: ConsoleComponent, data: {context : CONSOLE_CONTEXT},
children: [
{ path: "projects", component: ProjectsListComponent, data : {context : PROJECT_CONTEXT}}, --> Loaded eagerly
{ path: "projects/:projectId/users", loadChildren: "./users/users.module#UsersModule" }, ---> Loaded laziness
{ path: '', redirectTo: "projects", pathMatch: "full" },
]
}
];

export const ConsoleRouting: ModuleWithProviders = RouterModule.forChild(ConsoleRoutes);

snackbar 组件初始化一个可观察对象,当它被调用时会在组件上显示一条消息。

snackbar.service.ts

export class SnackbarService {
private subject = new Subject<any>();
constructor() { }

showSnackbar(message, type) {
// Treatment
this.subject.next(snackbarInfos);
}

getSnackbarObservable(): Observable<any> {
return this.subject.asObservable();
}
}

sanckbar.component.ts

export class SnackbarComponent implements OnInit {

constructor(private snackbarService: SnackbarService, private translate: TranslateService) { }

ngOnInit() {
this.snackbarService.getSnackbarObservable()
.subscribe(snackbar => {
this.snackbar = snackbar;
this.display();
});
}
}

因此子组件调用 snackbar 服务将信息发送到可观察对象。

我注意到当我的子组件使用延迟加载加载时,在 snackbar.component.ts 中初始化的 observable 从未被订阅(从未被调用)...

然而,当子组件被提前加载时它会完美地工作

您知道为什么不调用 RxJS 可观察对象吗?

最佳答案

我怀疑这是因为延迟加载的模块有自己的单例服务范围,这意味着你的 SnackbarService 有两个实例。尝试将服务移动到最高级别的模块,例如应用程序模块,看看是否可以解决问题。

关于angular - 延迟加载 : Observable not subscribed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47134412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com