Как сделать константу строки в angular 4?

В моем сервисе я использую сообщение http. Я хочу установить URL как константу.

return this.http.get(this.config.API_URL+'users', options).map(res=>res.json());

Я попробовал со службой:

import {Injectable} from '@angular/core';

@Injectable()
export class AppService {
  API_URL :String;

  constructor() {
    this.API_URL = 'some url';
  }
}

Есть ли другой способ сделать постоянное значение в Angular4?

Ответ 1

Я не уверен, понимаю ли я ваш вопрос, но если вы хотите создать константы, вы можете сделать это в другом классе и импортировать его.

constants.ts

export class Constants {
  public static get HOME_URL(): string { return "sample/url/"; };
}

sample.component.ts

   import { Constants } from "./constants";
    @Component({

    })
     export class SampleComponent {
      constructor() {
       let url = Constants.HOME_URL;
      }
    }

Ответ 2

Вы можете просто экспортировать константу с помощью модулей es6/ typescript, если это все, что вам нужно:

constants.ts:

export const API_URL: string = 'api/url';

И импортируйте, где необходимо:

import { API_URL } from './constants.ts';

...

return this.http.get(API_URL+'users', options)
                .map(res=>res.json());

или если у вас много констант, вы можете импортировать их все:

import * as constants from './constants.ts';

...

return this.http.get(constants.API_URL+'users', options)
                    .map(res=>res.json());

Если вы хотите настроить константы для каждого приложения при запуске, вы можете использовать поставщиков. Посмотрите верхний ответ по этой ссылке: как мне получить инъекцию зависимостей angular2 для работы с поставщиками стоимости.

Ответ 3

Определите константу приложения как общедоступную статическую только для чтения, как показано ниже

public static readonly constName = 'Значение Consts'

/app-constants.ts

export class Constants {

     public static readonly routeAuthRegister = '/auth/register';
     public static readonly routeAuthLogin = '/auth/login';
     public static readonly routeAuthRecovery = '/auth/forgot-password';

}

/api-constants.ts

Лучше хранить базовый URI в файлах конверсии. и определите свою среду в приложениях в .angular-cli.json. я здесь прикрепил снимок экрана ниже для определения пользовательских сред приложений.

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

export class ApiURIs {

    public static readonly apiURL: string = environment.apiEndpoint;
    public static readonly apiV1: string = environment.apiEndpoint + '/v1';
    public static readonly apiV2: string = environment.apiEndpoint + '/v2';


    public static readonly login: string = ApiEndpoints.apiV1 + '/login';
    public static readonly register: string = ApiEndpoints.apiV1 + '/register';
    public static readonly signup: string = ApiEndpoints.apiV2 + '/register';

}

Использование констант

/core/auth.service.ts

import { ApiURIs } from './api-constants';

@Injectable()
export class AuthService {
    .....

    signUpUser(data) {
        return this.https.post('${ApiURIs.signup}', data);
    }

    .....
}

/auth/login.component.ts

export class LoginComponent implements OnInit {
   .....

   navigateToForgotPassowrd() {

        this.router.navigate([Constants.routeAuthRecovery]);
   }
   ......
}

Определите свой другой URI API для другой среды

environments file & .angular-cli.json