简体   繁体   English

angular-cli for angular2如何加载环境变量

[英]angular-cli for angular2 how to load environment variables

I am new to the angular-cli and want to load url's for my api service calls by env. 我是angular-cli的新手,想要通过env为我的api服务调用加载url。 Eg 例如

local: http://127.0.0.1:5000
dev: http://123.123.123.123:80
prod: https://123.123.123.123:443

eg in environment.prod.ts 例如在environment.prod.ts中

I assume this: 我假设这个:

export const environment = {
  production: true
  "API_URL": "prod: https://123.123.123.123:443"
};

But from angular2, how do I call so I can get API_URL? 但是从angular2,我如何调用以便获得API_URL?

eg 例如

this.http.post(API_URL + '/auth', body, { headers: contentHeaders })
      .subscribe(
        response => {
          console.log(response.json().access_token);
          localStorage.setItem('id_token', response.json().access_token);
          this.router.navigate(['/dashboard']);
        },
        error => {
          alert(error.text());
          console.log(error.text());
        }
      );
  } 

Thanks 谢谢

If you look at the root of your angular-cli's generated project, you will see in main.ts : 如果你看一下angular-cli生成的项目的根,你会在main.ts中看到:

import { environment } from './environments/environment';

To get your api URL, you just have to do the same in your service header. 要获取api URL,您只需在服务标头中执行相同操作即可。

The path to environment is depending on the position of your service related to the environment folder. 环境路径取决于与环境文件夹相关的服务位置。 For me, it works like this : 对我来说,它的工作原理如下:

import { Http, Response } from '@angular/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable';
import { environment } from '../../environments/environment';

@Injectable()
export class ValuesService {
    private valuesUrl = environment.apiBaseUrl + 'api/values';
    constructor(private http: Http) { }

    getValues(): Observable<string[]> {
        return this.http.get(this.valuesUrl)
        .map(this.extractData)
        .catch(this.handleError);
    }

    private extractData(res: Response) {
        let body = res.json();
        return body || { };
    }

    private handleError(error: any) {
        let errMsg = (error.message) ? error.message :
        error.status ? `${error.status} - ${error.statusText}` : 'Server error';
        console.error(errMsg);
        return Observable.throw(errMsg);
    }
}

After release of Angular 4.3 we have a possibility to use HttpClient interceprtors. 在Angular 4.3发布后,我们有可能使用HttpClient拦截器。 The advantage of this method is avoiding of import/injection of API_URL is all services with api calls. 这种方法的优点是避免导入/注入API_URL是api调用的所有服务。

For more detailed answer you may look here https://stackoverflow.com/a/45351690/6810805 有关更详细的答案,请访问https://stackoverflow.com/a/45351690/6810805

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM