ngrx / data:拥有多个api根的最佳方法?

时间:2019-12-20 12:28:56

标签: ngrx angular-ngrx-data ngrx-data

我需要针对不同角度模块的不同api端点根。

例如

据我所知,可以通过app.module中的DefaultDataServiceConfig来更改ngrx / data调用的api根,但只能全局更改

如何在不同的Angular模块中具有不同的api根?

目前,我正在根据我的命名约定使用CustomizeHttpUrlGenerator来更改网址,但是我想有更好的方法。

谢谢

3 个答案:

答案 0 :(得分:0)

创建一个提供程序并在需要时更改它。

const API_ROOT = new InjectionToken<string>('BASE_HREF', {
    factory: () => 'http://server:port/user-api ',
})

然后为管理员

...
providers: [
  {
    provide: API_ROOT,
    useValue: 'http://server:port/admin-api',
  }
],
...

以及代码中的某处

constructor(@Inject(API_ROOT) public readonly apiRoot: string) {}

答案 1 :(得分:0)

您可以在 HttpUrlGenerator 的 entityResource 方法中为每个实体添加一个条目。

因此在用户实体的用户模块中,您将拥有

@Injectable()
export class UserDataService extends DefaultDataService<User> {

constructor(http: HttpClient, httpUrlGenerator: HttpUrlGenerator) {
        httpUrlGenerator.entityResource('User','http://server:port/user-api' );
        super('User', http, httpUrlGenerator);
    }
}

答案 2 :(得分:0)

与 malc 的回答类似,我建议您根据具体情况重写 DataService 的配置。

export class UserDataService extends DefaultDataService<User> {
    constructor(http: HttpClient, httpUrlGenerator: HttpUrlGenerator, defaultConfig: DefaultDataServiceConfig) {
        super('User', http, httpUrlGenerator, { ...defaultConfig, root: 'http://server:port/user-api' })
    }
}

这比预先设置 DefaultDataService 的 knownHttpUrls 更简单。