当前位置: 首页 > 知识库问答 >
问题:

定义全局常量

古弘
2023-03-14

在Angular 1. x中,您可以这样定义常量:

angular.module('mainApp.config', [])
    .constant('API_ENDPOINT', 'http://127.0.0.1:6666/api/')

Angular(使用TypeScript)中的等价物是什么?

我只是不想在我的所有服务中一遍又一遍地重复API基url。

共有3个答案

苏昂雄
2023-03-14

现在,我们可以简单地使用environments文件,如果您的项目是通过angular cli生成的,angular将提供默认值。

举个例子

在您的环境文件夹中创建以下文件

  • <代码>环境。产品ts

并且每个文件都可以保存相关的代码更改,例如:

>

  • environment.prod.ts

    export const environment = {
         production: true,
         apiHost: 'https://api.somedomain.com/prod/v1/',
         CONSUMER_KEY: 'someReallyStupidTextWhichWeHumansCantRead', 
         codes: [ 'AB', 'AC', 'XYZ' ],
    };
    

    <代码>环境。质量保证。ts

    export const environment = {
         production: false,
         apiHost: 'https://api.somedomain.com/qa/v1/',
         CONSUMER_KEY : 'someReallyStupidTextWhichWeHumansCantRead', 
         codes: [ 'AB', 'AC', 'XYZ' ],
    };
    

    <代码>环境。开发ts

    export const environment = {
         production: false,
         apiHost: 'https://api.somedomain.com/dev/v1/',
         CONSUMER_KEY : 'someReallyStupidTextWhichWeHumansCantRead', 
         codes: [ 'AB', 'AC', 'XYZ' ],
    };
    

    您可以将环境导入到任何文件中,例如服务clientUtilServices。ts

    <代码>从“..//环境/环境'

    getHostURL(): string {
        return environment.apiHost;
      }
    

    打开angular cli文件。角度cli。json和内部“应用程序”:[{…}] 添加以下代码

     "apps":[{
            "environments": {
                "dev": "environments/environment.ts",
                "prod": "environments/environment.prod.ts",
                "qa": "environments/environment.qa.ts",
               }
             }
           ]
    

    如果您想为生产构建,运行ng build--env=prod它将从environment.prod.ts读取配置,就像您可以为qadev执行配置一样

    我在我的提供商中做了如下工作:

    import {Injectable} from '@angular/core';
    
    @Injectable()
    export class ConstantService {
    
    API_ENDPOINT :String;
    CONSUMER_KEY : String;
    
    constructor() {
        this.API_ENDPOINT = 'https://api.somedomain.com/v1/';
        this.CONSUMER_KEY = 'someReallyStupidTextWhichWeHumansCantRead'
      }
    }
    

    然后我可以访问任何地方的所有常量数据

    import {Injectable} from '@angular/core';
    import {Http} from '@angular/http';
    import 'rxjs/add/operator/map';
    
    import {ConstantService} from  './constant-service'; //This is my Constant Service
    
    
    @Injectable()
    export class ImagesService {
        constructor(public http: Http, public ConstantService: ConstantService) {
        console.log('Hello ImagesService Provider');
    
        }
    
    callSomeService() {
    
        console.log("API_ENDPOINT: ",this.ConstantService.API_ENDPOINT);
        console.log("CONSUMER_KEY: ",this.ConstantService.CONSUMER_KEY);
        var url = this.ConstantService.API_ENDPOINT;
        return this.http.get(url)
      }
     }
    

  • 苏高峰
    2023-03-14

    angular团队提供的配置解决方案可以在这里找到。

    以下是所有相关代码:

    1)app.config.ts

    import { OpaqueToken } from "@angular/core";
    
    export let APP_CONFIG = new OpaqueToken("app.config");
    
    export interface IAppConfig {
        apiEndpoint: string;
    }
    
    export const AppConfig: IAppConfig = {    
        apiEndpoint: "http://localhost:15422/api/"    
    };
    

    app.module.ts

    import { APP_CONFIG, AppConfig } from './app.config';
    
    @NgModule({
        providers: [
            { provide: APP_CONFIG, useValue: AppConfig }
        ]
    })
    

    your.service.ts

    import { APP_CONFIG, IAppConfig } from './app.config';
    
    @Injectable()
    export class YourService {
    
        constructor(@Inject(APP_CONFIG) private config: IAppConfig) {
                 // You can use config.apiEndpoint now
        }   
    }
    

    现在,您可以在任何地方插入配置,而无需使用字符串名称,也无需使用接口进行静态检查。

    当然,您可以将接口和常数进一步分开,以便能够在生产和开发中提供不同的值。

    费秦迟
    2023-03-14

    以下更改适用于Angular 2最终版本:

    export class AppSettings {
       public static API_ENDPOINT='http://127.0.0.1:6666/api/';
    }
    

    然后在服务中:

    import {Http} from 'angular2/http';
    import {Message} from '../models/message';
    import {Injectable} from 'angular2/core';
    import {Observable} from 'rxjs/Observable';
    import {AppSettings} from '../appSettings';
    import 'rxjs/add/operator/map';
    
    @Injectable()
    export class MessageService {
    
        constructor(private http: Http) { }
    
        getMessages(): Observable<Message[]> {
            return this.http.get(AppSettings.API_ENDPOINT+'/messages')
                .map(response => response.json())
                .map((messages: Object[]) => {
                    return messages.map(message => this.parseData(message));
                });
        }
    
        private parseData(data): Message {
            return new Message(data);
        }
    }
    
     类似资料:
    • A-Frame通过window.AFRAME浏览器全局变量来暴露其公共接口。 (require('aframe')). AFRAME属性 属性(Property) 描述 AComponent 组件(Component)原型。 AEntity 实体(Entity)原型。 ANode A-Frame元素继承的基础节点原型。 AScene 场景(Scene)原型。 components 已注册的组件对象

    • 问题内容: 是否可以使用webpack定义全局变量以产生如下所示的结果: 我看到的所有示例都使用外部文件 问题答案: 有几种方法可以处理全局变量: 1)将变量放入模块中。 Webpack仅对模块进行一次评估,因此您的实例保持全局状态,并在模块之间进行更改。 因此,如果您创建像a之类的东西并导出所有全局变量的对象,则可以读取/写入这些全局变量。您可以导入一个模块,从功能中对对象进行更改,然后导入另一

    • 问题内容: 我需要/想要在全局定义我的自定义分析器。因此,我根据以下答案编辑了ES的配置文件(elasticsearch.yml):是否可以自定义ElasticSearch以使用自己的停用词列表?相关条目是 但是当我尝试调用时,我得到了一个。 配置错误吗?(尽管我希望在启动过程中读取配置时遇到错误时,ES无法启动) 如何正确定义全局分析器? 编辑: 我正在使用版本0.90.0 问题答案: 问题出在

    • 问题内容: 在我的代码中,我有: 然后,编译器将说“ NameError:全局名称a()未定义”。如果我将所有东西都从A类中取出,那没问题,但是如何在A类中定义方法?非常感谢你。 问题答案: 你需要调用调用从。是 不是 一个全球性的功能,它是在类中的方法。 您可能想通读有关类的Python教程,以获得更详细的信息。

    • 问题内容: 我在Mac OS X上使用Python 2.6.1。 我有两个简单的Python文件(如下),但是当我运行时 我在终端上: 我尝试以不同的方式重命名文件和类,这就是为什么两端有x和z的原因。;) 文件sqlitedbx.py 文件update_url.py 问题答案: 您需要做:

    • 本文向大家介绍Springboot之自定义全局异常处理的实现,包括了Springboot之自定义全局异常处理的实现的使用技巧和注意事项,需要的朋友参考一下 前言: 在实际的应用开发中,很多时候往往因为一些不可控的因素导致程序出现一些错误,这个时候就要及时把异常信息反馈给客户端,便于客户端能够及时地进行处理,而针对代码导致的异常,我们一般有两种处理方式,一种是throws直接抛出,一种是使用try.