2

我刚开始在我的项目中使用NgRx Data,我正在寻找几个小时,但我找不到解决我面临的问题的方法。

我正在尝试通过使用DefaultDataServiceConfig来更改默认的调用根:

app.module.ts

export const defaultDataServiceConfig: DefaultDataServiceConfig = {
  root: `${environment.apiUrl}/`,
};

@NgModel({
   ...
   providers: [
      {
         provide: DefaultDataServiceConfig
         useValue: defaultDataServiceConfig
      }
   ]
});

环境.ts

export const environment = {
   ...
   apiUrl: 'https://my-api.com/v1',
};

但是,呼叫将转到localhost http://localhost:3000/client/list而不是转到my-api.com https://my-api.com/v1/client/list

有什么我想念的吗?我找不到任何示例,并且ngrx.io文档很差。

4

2 回答 2

5

我遇到了同样的问题。

检查DefaultDataService Doc,其构造函数中的第四个参数是可选的,默认情况下是未定义的。当您扩展此类创建自己的服务时,请像这样传递 config 参数:

@Injectable()
export class EmployersDataService extends DefaultDataService<Employer> {
  constructor(
    http: HttpClient,
    httpUrlGenerator: HttpUrlGenerator,
    config: DefaultDataServiceConfig
  ) {
    super('Employer', http, httpUrlGenerator, config);
  }
}

然后,app.module.ts 中提供的 DefaultDataServiceConfig 将起作用。

于 2020-09-21T21:06:08.227 回答
1

您应该在导入 EntityDataModule 的同一级别上导入它

@NgModule({
    declarations: [
        DataComponent,
    ],
    imports: [
        CommonModule,
        EntityDataModule.forRoot(entityConfig)
    ],
    providers: [
        {
            provide: DefaultDataServiceConfig,
            useValue: {
                root: environment.apiUrl,
            },
        }
    ],
    exports: [
        DataComponent,
    ],
})

如果由于某种原因它对您不起作用 - 您可以提供自己的HttpUrlGeneratorurl,它会解析每个实体的 url。

export abstract class HttpUrlGenerator {
  abstract entityResource(entityName: string, root: string): string;

  abstract collectionResource(entityName: string, root: string): string;

  abstract registerHttpResourceUrls(
    entityHttpResourceUrls?: EntityHttpResourceUrls
  ): void;
}
于 2020-05-11T15:38:01.300 回答