如果我具有身份验证库,其中包含组件,服务,ngrx等...如何访问实现身份验证库的应用程序的环境?因此Auth服务应该知道后端网址以进行登录。所以:
import { environment as env } from "@env";
@Injectable()
class AuthService {
private endpoint = '/v1/auth';
private backendHost = env.backendHost;
authenticateUser(credentials) {
return makeHttpRequestHereToBackend(this.backendHost.this.endpoint, credentials);
}
}
无论在什么地方实现Authentication lib,lib服务都知道要从实现所述lib的应用程序环境中命中哪个服务器。
谢谢!!
答案 0 :(得分:0)
对我有用的解决方案
在libs下创建一个名为app-config
的文件夹,并在app-config文件夹内添加一个“ index.ts”文件。可以在所有应用程序之间共享此库。在index.ts文件中添加以下内容
import { InjectionToken } from '@angular/core';
export const APP_CONFIG = new InjectionToken('Application config');
打开基本tsconfig.json
文件,并添加app-config的路径,以便它对通过@app-workspace/app-config
导入您的应用程序有用
"paths": {
"@app-workspace/ui": ["libs/ui/src/index.ts"],
"@app-workspace/auth": ["libs/auth/src/index.ts"],
"@app-workspace/utils": ["libs/utils/src/index.ts"],
"@app-workspace/app-config": ["libs/app-config/index.ts"]
}
现在,在您的应用程序内部打开apps/app1/src/app/app.module.ts
下的文件,并对provider数组进行以下更改
import { APP_CONFIG } from '@app-workspace/app-config';
import { environment } from '../environments/environment';
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
AppRoutingModule,
],
providers: [
{ provide: APP_CONFIG, useValue: environment}
],
bootstrap: [AppComponent]
})
export class AppModule {}
这是environment.ts
下的示例app1
文件
export const environment = {
production: false,
apiUrl: 'http://localhost:3000/api',
};
您还可以在共享库中使用app-config,例如,假设您正在共享库libs/auth/src/lib/services/auth.service.ts
中进行api调用
import { APP_CONFIG } from '@app-workspace/app-config';
import { Inject, Injectable } from '@angular/core';
@Injectable()
export class AuthService {
constructor(
@Inject(APP_CONFIG) private appConfig: any
) {
console.log(this.appConfig.apiUrl); // This will print `http://localhost:3000/api`
}
}
希望这会有所帮助:)另外,在旁注中,如果使用导入时遇到任何错误,则可能必须重新启动应用程序。