有关此方法的几个问题:https://medium.com/@thomasburlesonIA/push-based-architectures-with-rxjs-81b327d7c32d
interface AppState = {
account: Account,
servers: Server[]
}
interface Server {
name: string;
details: ServerDetails;
}
let state: AppState = {
account: null,
servers: null
}
我的意图是在用户更改路由器(即本地主机/服务器/ srvname)时按需加载详细信息 因此,换句话说,细节是在ngOnInit of details组件中获取的。
但是,当用户直接输入url(localhost / server / srvname)时,它将跳过可以说通常会加载Server甚至AppState数据的先前组件。我在AppState.servers中为null,无法更新状态。
如何很好地处理此类加载。我应该手动处理它吗,即
getDetails(server: string) {
this.loadServer(server); // load server before details
this.loadDetauls(server);
this.updateAppState();
}
还是通过ORM的onDemand将属性放入模型中?
为此有好的模式或众所周知的方法吗?还是ngrx处理这样的事情?
答案 0 :(得分:0)
您可以使用路由器结构制作父/子组件,并通过这种方式将每个组件应负责的职责分开。
例如,您的应用程序组件将始终被首先加载,因此它可以负责通过在其OnInit周期上执行服务来加载初始配置,此后,它将加载为您要加载的路由定义的组件。 / p>
如果您希望将模块分开,则可以使用结构化的wouter创建服务器模块以将初始服务加载到组件中,然后创建子组件以加载详细信息
对于模块方法,路由器将类似于:
const routes: Routes = [
{
path: '',
component: ServerComponent,
children: [
{
path: 'details',
loadChildren: () => import('./components/server-details/server-details.module').then(m => m.ServerDetailsModule)
},
]
},
];
@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule]
})
export class ServerRoutingModule { }