change - angular 6 page title
Pasando variables de entorno a la librerÃa angular2. (3)
En caso de que todavía esté buscando una solución, aquí es cómo logré algo similar a lo que estaba pidiendo (usando Angular 4.2.4).
En su AppModule
(o el lugar donde desea importar su biblioteca), llame al método forRoot()
en su LibraryModule
. Con la ayuda de esta función, puede pasar cualquier valor de configuración a su biblioteca, por ejemplo, el entorno de su aplicación.
import {environment} from "../environments/environment";
...
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
...
LibraryModule.forRoot(environment)
],
bootstrap: [AppComponent]
})
export class AppModule {
}
Por supuesto, usted LibraryModule
debe ofrecer el método forRoot()
. En la matriz de proveedores, puede proporcionar servicios, valores y más . En este caso, ''env''
actúa como el token que contiene el objeto de entorno dado por simplicidad. También puedes usar un InjectionToken lugar.
@NgModule({
...
})
export class LibraryModule {
public static forRoot(environment: any): ModuleWithProviders {
return {
ngModule: LibraryModule,
providers: [
ImageService,
{
provide: ''env'', // you can also use InjectionToken
useValue: environment
}
]
};
}
}
Como el módulo de env
ahora proporciona el token env
, puede inyectarlo en todos sus servicios o componentes secundarios.
@Injectable()
export class ImageService {
constructor(private http: Http, @Inject(''env'') private env) {
}
load(): Observable<any> {
// assume apiUrl exists in you app''s environment:
return this.http.get(`${this.env.apiUrl}/images`)
.map(res => res.json());
}
}
¡Espero que eso ayude!
He creado la biblioteca interna de la empresa utilizando el generador de datos de angualr2-library.
Algunos de los servicios angulares utilizan variables de entorno en nuestras aplicaciones actuales (los puntos finales de API se cambian en cada env). Me preguntaba cuál es la mejor manera de pasar el objeto de entorno actual a los servicios de biblioteca angular2.
Encontré una solución alternativa a este problema en un problema de GitHub . La solución en el hilo de GitHub tiene un error (un error tipográfico), por lo que incluyo la solución fija aquí:
Para comenzar, agregue un proveedor a su módulo de aplicación de nivel superior que contenga el archivo de entorno.
import {environment} from ''../environments/environment''
@NgModule({
providers: [
{provide: ''environment'', useValue: environment}
]
// object properties omitted for brevity...
})
class AppModule {}
Finalmente, haga uso de un decorador de inyección para incluir su archivo de entorno en cualquier otra parte de su aplicación que desee (biblioteca o de otro tipo):
@Component({
// object properties omitted for brevity
})
class MyComponent {
private environment
constructor(
@Inject(''environment'')
environment
) {
this.environment = environment
}
}
Si todavía estás buscando la respuesta. En la versión actual, es decir, Angular> 6, no tienes que hacer nada.
Los comandos de angular-cli "ng build --prod (para Producción) & ng build (para Desarrollo)" se encargarán de usted.
Ejemplo: si está ejecutando el proyecto en un entorno de desarrollo, todas las variables se capturan desde src / environment / environment.ts. En el proyecto de la biblioteca de componentes, solo importe "import {environment} de ''environment / environment'';" (asegúrese de conocer la ruta) cuidará el entorno dependiendo del comando de construcción angular-cli.