级联调用状态更新

时间:2020-01-18 12:09:22

标签: angular redux rxjs ngrx

有关此方法的几个问题:https://medium.com/@thomasburlesonIA/push-based-architectures-with-rxjs-81b327d7c32d

  1. 对于这种体系结构,是否有任何通用的知名名称,我可以搜索? (不容易找到)
  2. 我遇到的问题是我处于状态
    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处理这样的事情?

1 个答案:

答案 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 { }